gpt4 book ai didi

python - python对象的内存分配

转载 作者:行者123 更新时间:2023-11-28 22:14:12 27 4
gpt4 key购买 nike

我有以下代码:

a = 2
b = a

a = a + 2
print (a)
print (b)

我的问题是为什么 b 打印出 2 而不是 4?如果把a赋值给b,b不就一直引用a的内存吗?

谢谢

最佳答案

因为您已通过 x = x + 1 将 x 重新分配到一个新位置,这与不变性无关。

用于检查:

x = 2
y = x

>>> id(x), id(y)
(26726784, 26726784) # same

然后,改变这个:

x = x+1

>>> id(x), id(y)
(26726760, 26726784) # not same, because x reassigned to a new reference location.

如果您对可变的 list 执行相同的操作,您将得到相同的结果:

x=[5]
y=x

>>> id(x), id(y)
(139890260976056, 139890260976056)

作业:

x = x + [5]

>>> id(x), id(y)
(139890260094344, 139890260976056) # not same, id reallocated on assignment
>>> x, y
([5, 5], [5])

通过使用 x.append(5),您将在列表中看到可变行为,其中 x 和 y 都会随着您修改对象本身而改变。但在这种情况下,导致差异的不是对象的可变性。更改引用的是赋值 x=something else

python 中关于 int 的一个有趣的属性是较小的是预分配的。例如,如果您这样做:

x = 5
y = x
x = 5
id(x) == id(y) # True

但是,如果您这样做,id 将是相同的:

x = 5000000000000
y = x
x = 5000000000000 # same as previous.
id(x) == id(y) # False

这是由于小整数具有预先分配的位置,而大整数则没有。因此,大整数的重新分配将找到不同的位置。

这验证了@juanpa.arrivillaga 的观点,即这是由于赋值,而不是不变性。

关于python - python对象的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53526955/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com