Rez*_*nik 5 python list ipython python-3.x python-internals
我最近了解到,当您在Python中删除列表时,该列表的引用会保存在数组中,并在初始化新列表时弹出。
我在常规解释器中运行了此命令:
l = [1,2,3]
l_id = id(l)
del l
g = [1,2,3]
id(g) == l_id # True
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,我得到了正确的结果。
我在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
Run Code Online (Sandbox Code Playgroud)
而且它总是发生的,不仅仅是获得相同参考的随机事件
我确实知道为什么发生这种情况,我只想知道为什么仅在纯python解释器上而不是在我的ipython上发生,以及哪种方法最适合内存管理
正如我可以解释的那些列表具有相同的ID的原因,我无法理解为什么它是ipython和python之间的区别。
查看List listobject.c的实现。
如我们所见,有一个称为的引用数组free_list。数组的值是被销毁的列表对象,以及numfree数组索引的计数。我们可以看到,如果删除的列表超过80个,则下一个列表将不会保存在数组中。因此,从这些代码行中我们可以说,对于任何新的python解释器,我的陈述始终是正确的。
但是我仍然找不到ipython这样工作的原因
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |