python - 为什么可变变量不能在没有链接的情况下一起分配?

标签 python variable-assignment immutability mutable

考虑以下几点:

>>> a = {}
>>> b = {}
>>> c = {}
>>> c['a'] = 'b'
>>> a
{}
>>> b
{}
>>> c
{'a': 'b'}

好的,这一切都很好。正是我所期望的。所以我把它缩短了。

>>> a = b = c = {}
>>> c['a'] = 'b'
>>> a
{'a': 'b'}
>>> b
{'a': 'b'}
>>> c
{'a': 'b'}

这是怎么回事?这不会发生在其他不可变数据类型上,例如整数。

>>> a = b = c = 0
>>> a += 1
>>> a
1
>>> b
0
>>> c
0

我认为这可能与不变性有关,但这种行为对我来说很奇怪。任何人都可以阐明为什么会发生这种情况吗?

最佳答案

What's going on? This doesn't happen with other immutable data types, like integers.

你击中了它的头。不可变数据类型(整数、字符串等)不会这样,而可变数据类型(列表、字典等)会这样。

当您执行 a = b = c = 0 时,所有三个名称都指向同一内存。由于整数是不可变的,当你改变其中一个的值时,它必须在新内存中创建一个新的整数对象,而其他的仍然指向旧对象。可变对象就地修改,因此所有名称仍指向同一个(修改后的)对象。

关于python - 为什么可变变量不能在没有链接的情况下一起分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14167787/

相关文章:

PHP:数组声明中的变量

c++ - C++程序中的基本指针问题

c++ - 如果类有 const 成员,则移动赋值运算符被定义为已删除?

c# - 如何在 C# 中创建不可变对象(immutable对象)?

python - 如何在 python 中创建不可变字典?

python - 格式 : "png" not recognized at pygraphviz Python, Heroku

python click 设置选项的允许值

python - 从列表中动态删除元素

python - 实现合并排序算法以升序对数字列表进行排序

swift - struct(不变性)与线程安全有何关系