关于python字典的一个问题

fmz 发布于 2013/07/24 12:14
阅读 419
收藏 0

class p:
    c={}


a=p()
b=p()
a.c[1]=b
b.c[1]=a


for i in a.c:
    del a.c[i].c[1]


这段代码错误 
RuntimeError: dictionary changed size during iteration


经过实验,发现使用a.c[1].c.pop(1)也会导致a和b两个的字典元素都被删除,这是怎么回事?

    

    

以下是问题补充:

@fmz:为什么a.c也变为空? (2013/07/24 12:19)
加载中
0
李学明
李学明

在这个例子中, c是一个类变量, 即 a.c 和 b.c是指向同一块内存的, 所以当修改b.c时, a.c也会被修改

fmz
fmz
明白了,谢谢
0
wx---每日佳选
wx---每日佳选
在循环中是不能改变字典
0
wx---每日佳选
wx---每日佳选
d = {1:2,2:3}
for i in d:
  del d[i]

0
轻风叶语
轻风叶语
python中对象是引用传递,如果你希望值传递,需要用clong,如果应用层次比较深,就必须使用深度克隆 
fmz
fmz
嗯嗯,谢谢了
返回顶部
顶部