В чем разница между слабыми и сильными ссылками в Python
Python
Middle
Без компании
В чем разница между слабыми и сильными ссылками в Python
Ответы
В Python сильные ссылки (strong references) — это обычные ссылки, которые увеличивают счётчик ссылок объекта и предотвращают его удаление сборщиком мусора. Слабые ссылки (weak references) не увеличивают счётчик ссылок, позволяя объекту быть удалённым, если на него нет других ссылок.
Пример:
```
import weakref
class MyClass:
pass
obj = MyClass() # сильная ссылка
weak_obj = weakref.ref(obj) # слабая ссылка
print(weak_obj()) # <__main__.MyClass object at ...>
del obj
print(weak_obj()) # None, объект удалён
```
Ключевые отличия:
- Слабые ссылки не препятствуют сборке мусора
- Используются для кэшей, обработчиков событий, когда не нужно удерживать объект в памяти
- Доступ через вызов weakref (weak_obj())
- Модуль weakref также предоставляет WeakValueDictionary, WeakSet и др.
Слабые ссылки полезны для реализации паттернов без утечек памяти.