我想知道是否有人可以向我解释这一点:
In [400]: poz0=''
In [401]: poz1=''
In [402]: poz={0:poz0, 1:poz1}
In [403]: for i in range(1):
.....: poz[i]='some value '+str(i)
.....:
In [404]:
In [405]: poz[0]
Out[405]: 'some value 0'
In [406]: poz0
Out[406]: ''
我期待poz0为== poz [0],poz1也是如此,但事实并非如此。任何人都可以解释原因吗?
由于
答案 0 :(得分:4)
您已将poz[0]
重新分配给其他对象,即'some value '+str(0)
的值。赋值运算符=
不会修改poz[0]
的值,而是更改dict
中的绑定。
答案 1 :(得分:2)
值不同,因为str
实例是内置的不可变对象(数字,字符串,元组,frozensets)。因此,当您在poz={0:poz0, 1:poz1}
中创建字典时,实际上与poz={0:'', 1:''}
一样。
poz0
与poz[0]
没有任何关联,有不同的对象。
更新回复评论:
列表的行为不一样,因为列表是可变对象:
In [9]: l = [1,2,3]
In [10]: d = {0: l}
In [12]: d[0]
Out[12]: [1, 2, 3]
In [13]: d[0].append(4)
In [14]: d[0]
Out[14]: [1, 2, 3, 4]
In [15]: l
Out[15]: [1, 2, 3, 4]