Fre*_*nan 2 python mutable immutability variable-assignment
考虑以下:
>>> a = {}
>>> b = {}
>>> c = {}
>>> c['a'] = 'b'
>>> a
{}
>>> b
{}
>>> c
{'a': 'b'}
Run Code Online (Sandbox Code Playgroud)
好的,这一切都很好.正是我所期待的.那么我缩短它.
>>> a = b = c = {}
>>> c['a'] = 'b'
>>> a
{'a': 'b'}
>>> b
{'a': 'b'}
>>> c
{'a': 'b'}
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?其他不可变数据类型(如整数)不会发生这种情况.
>>> a = b = c = 0
>>> a += 1
>>> a
1
>>> b
0
>>> c
0
Run Code Online (Sandbox Code Playgroud)
我认为这可能与不变性有关,但这种行为对我来说很奇怪.谁能解释为什么会发生这种情况?
这是怎么回事?其他不可变数据类型(如整数)不会发生这种情况.
你打了它头.不可变数据类型(整数,字符串等)在可变数据类型(列表,字典等)的情况下不会以这种方式运行.
当你这a = b = c = 0三个名字都指向同一个内存时.由于整数是不可变的,当你更改一个值时,它必须在新内存中创建一个新的整数对象,而其他对象则保持指向旧对象.可变对象在适当的位置进行修改,因此所有名称仍然指向相同(已修改)的对象.