多个名称涉及1个值问题

时间:2019-06-22 11:57:36

标签: python list

我最近阅读了此链接here 这引起了一个问题。作者只说了这个

x = 23
y = x

那呢

x = 23
y = 23

x和y都引用一个值23仍然正确吗?第一个“ 23”与第二个“ 23”相同吗?如果那是为什么我尝试这个

a=[1,2,3]
b=[1,2,3]
b.reverse()
print(a)

结果是

[1, 2, 3]

那是为什么?因为a和b都引用值[1,2,3],而list是可变类型。正如作者所说     “如果两个名称引用相同的值,并且该值被突变,那么两个名称都将看到更改。”在我的代码中,b更改了,为什么a没有

1 个答案:

答案 0 :(得分:1)

两次创建一个全新的list不会造成混叠情况。从头开始创建两次 any 可变类型将不会导致别名。您的ab具有相同的内容,但是它们是两个完全不同的list

CPython参考解释器 有时会缓存小型/简单的不可变类型(小型int,空tuple和{{1} }等),因此您会发现初始化为str的所有内容都初始化为 same 23,但这是一个实现细节,在实践中很少涉及。基本上,只要您不从已经存在的对象中分配一个名称(并且不要做一些棘手的事情,例如序列乘法或可变的默认参数),任何别名都不会发生危险的感觉。