繁体   English   中英

python中的可变和不可变对象

[英]Mutable and immutable objects in python

我知道在 python 中,从 -5 到 256 的整数可以具有相同的 ID。 但是,如果两个不可变对象具有相同的 ID,会有什么后果呢? 当两个可变对象具有相同的 ID 时,后果如何?

谢谢你。

id在给定的时间点定义是唯一的(一次只有一个对象可以具有给定的id )。 如果您同时在两个名称上看到相同的id ,则表示这两个名称指向同一个对象。 对于像int这样的不可变类型没有“后果”,因为不可能通过任一别名修改对象( x = y = 5xy别名为同一个5对象,但x += 1大致相当于x = x + 1对于不可变对象,将x重新绑定到新对象6 ,而不是在适当的位置修改5对象); 这就是为什么像您观察到的小型int缓存这样的优化是安全的。

当两个可变对象具有相同的 ID 时,它们引用相同的内存地址。

a = 10
b = 10
print(id(a), id(b))

输出:

4355009952 4355009952

具有相同 ID 的两个可变对象的唯一后果是更改一个对象中的值将反映在另一个对象上。

a = 10
b = a
print(a, b)
print(id(a), id(b))
a = 6
print(a, b)
print(id(a), id(b))

输出:

10 10
4338298272 4338298272
6 10
4338298144 4338298272

具有相同的不可变对象不是结果,因为它们是不可变的

暂无
暂无

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

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