在循环中设置容器

时间:2015-06-10 16:59:10

标签: python

dictA = {'a':1, 'b':2, 'c':3}
preA = {}
print hex(id(preA))
preB = {}
print hex(id(preB))
dicts = [preA, preB]         #<---- looks like I can't save it like this?

for d in dicts:
    print hex(id(d))
    d = dictA
print preA
print preB

输出:

0x13348b0
0x13357f0
0x13348b0
0x13357f0
{}
{}

看起来它有相同的内存地址但是当我通过变量&#39; preA&#39;设置preBd时并且从preApreB获取值,就好像它们从未设置过一样。

谁能解释一下这里发生了什么?

2 个答案:

答案 0 :(得分:1)

d在每个循环的迭代中设置为当前字典。设置d = dictA毫无意义,因为d将作为第一步更改为下一个字典。

答案 1 :(得分:1)

问题是,您分配的内容实际上不是dict对象,而是名为d的变量。如果您在分配后print hex(id(d)),则应该看到不同的值。为了实际更改dict值本身,您必须使用一些修改它的函数,例如d["a"] = 1,或更相关的d.update(dictA)