为什么python内存管理对于整数和列表是不同的?

2024-04-20 01:46:39 发布

您现在位置:Python中文网/ 问答频道 /正文

让我们看看下面的例子

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

对于int,同一个对象引用了所有变量,而对于list,该对象正在被更改

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

请告诉我python是如何管理内存的


Tags: 对象内存idl1list例子intl3
1条回答
网友
1楼 · 发布于 2024-04-20 01:46:39

整数是不可变的。多个整数是否共享同一内存并不重要;整数不可能发生任何影响共享引用的事情。作为一种优化,Python维护一个小整数缓存,并在可能的情况下重用这些小整数

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

相关问题 更多 >