Недавно я узнал, что когда вы удаляете список в Python, ссылка на этот список сохраняется в массиве и выскакивает, когда вы инициализируете новый список.
Я запустил это в моем обычном интерпретаторе:
l = [1,2,3]
l_id = id(l)
del l
g = [1,2,3]
id(g) == l_id # True
И, как и ожидалось, я получил правильный результат.
Я попробовал то же самое на моем интерпретаторе IPython и вместо этого получил False
.Почему это происходит?Это лучше?
Версия Python: v3.7.0: 1bf9cc5093
Версия Ipython: 7.5.0
Обновление
Это также происходит с различными списками:
l = [1,2,3]
l_id = id(l)
del l
g = [1,2,3,4,5,6,7,8]
id(g) == l_id # True
И это всегда происходит, это не просто случайность, что они получают одну и ту же ссылку
Обновление 2
Я знаю, почему это случилось, я просто хочу знать, почему егослучилось только на чистом интерпретаторе python, а не на моем ipython, и какой из этих методов лучше для управления памятью
Обновление 3
Как я могу объяснить причину, по которой эти списки имеют одинаковый идентификатор, я не могу понять, почему это разница между ipython и python.
Посмотрите на реализацию List listobject.c .
Как мы видим, существует массивссылок под названием free_list
.значениями массива которых является список уничтоженных объектов, а количество numfree
для индексации массива.мы видим, что если удалено более 80 списков, следующий не будет сохранен в массиве.поэтому из этой строки мы можем сказать, что мое утверждение всегда может быть верным для любого нового интерпретатора Python.
, но я до сих пор не могу найти причину для ipython для такой работы