在python中根据字典映射分配一个值

时间:2012-03-09 12:22:07

标签: python

我想知道是否有人可以向我解释这一点:

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也是如此,但事实并非如此。任何人都可以解释原因吗?

由于

2 个答案:

答案 0 :(得分:4)

您已将poz[0]重新分配给其他对象,即'some value '+str(0)的值。赋值运算符=不会修改poz[0]的值,而是更改dict中的绑定。

答案 1 :(得分:2)

值不同,因为str实例是内置的不可变对象(数字,字符串,元组,frozensets)。因此,当您在poz={0:poz0, 1:poz1}中创建字典时,实际上与poz={0:'', 1:''}一样。

poz0poz[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]