繁体   English   中英

为什么python内存管理的整数和列表会有所不同?

[英]why the python memory management varies for integers and lists?

让我们看下面的例子。

>>> a=10
>>> b=10
>>> id(a)
41776876
>>> id(b)
41776876
>>> c=a
>>> id(c)
41776876
>>> d=10
>>> id(d)
41776876

在这里,对于int来说,同一对象引用了所有变量,而对于列表,该对象正在更改。

>>> l1=[10]
>>> l2=[10]
>>> id(l1)
42220360
>>> id(l2)
52956416
>>> l3=l1
>>> id(l3)
42220360
>>> l4=[10]
>>> id(l4)
52981472

请让我知道python在这里如何管理内存?

整数是不可变的。 多个整数共享相同的内存无关紧要; 整数可能完全不会影响共享引用。 作为一种优化,Python维护一个小整数的缓存,并在可能的情况下重用它们。

但是,列表是可变的。 如果两个不同的列表存储在同一存储器中只是因为它们当前具有相同的内容,那将是灾难性的-对一个列表的任何更改都将反映在所有列表中,即使它们之间的连接纯粹是偶然的。 只有显式地对同一列表进行多个引用(如l3 = l1 ),它们才真正在内存中共享。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM