列表中添加同一个字典,关于字典修改问题
修改列表一个元素里面字典的值,导致列表所有元素中字典的值发生改变,怎么解决?>>> b
[{'max': 123, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}]
>>> c=[]
>>> c.append(b)
>>> c
[[{'max': 123, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}]]
>>> c.append(b)
>>> c
[[{'max': 123, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}], [{'max': 123, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}]]
>>> c['max']=66
>>> c
[[{'max': 66, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}], [{'max': 66, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}]]
>>> id(c)
47707840
>>> id(c)
47707840 本帖最后由 永恒的蓝色梦想 于 2020-5-18 18:10 编辑
不要 c.append(b),写 c.append(.copy()]) b = [{'max': 123, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}]
c=[]
c.append(b[:]) # 这边用切片方法拷贝一次就好
c.append(b)
c['max']=66
print(c)
print((id(c)))
print(id(c))
如果帮助到你,记得给个最佳哦~{:10_287:} Twilight6 发表于 2020-5-18 16:49
如果帮助到你,记得给个最佳哦~
白给之王就是你了 永恒的蓝色梦想 发表于 2020-5-18 16:54
白给之王就是你了
{:10_319:} 永恒的蓝色梦想 发表于 2020-5-18 16:54
白给之王就是你了
同意{:10_275:} 本帖最后由 Cool_Breeze 于 2020-5-18 17:23 编辑
永恒的蓝色梦想 发表于 2020-5-18 16:48
不要 c.append(b),写 c.append(b.copy())
>>> c=[]
>>> c.append(b.copy())
>>> c
[[{'max': 66, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}]]
>>> c.append(b.copy())
>>> c
[[{'max': 66, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}], [{'max': 66, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}]]
>>> id(c)
47707040
>>> id(c)
47708320
>>> c["max"]=66
>>> c
[[{'max': 66, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}], [{'max': 66, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}]]
>>> c["max"]=77
>>> c
[[{'max': 77, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}], [{'max': 77, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}]]
这个行不通。 Cool_Breeze 发表于 2020-5-18 17:22
这个行不通。
好了我也白给了
c.append(.copy()]) 我修改了b为字典,不为列表就好了!
>>> b={'max': 101, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}
>>> type(b)
<class 'dict'>
[]
>>> c.append(b.copy())
>>> c.append(b.copy())
>>> c['max']=12
>>> c
[{'max': 12, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}, {'max': 1, 'max_time': None, 'min': 100000000000000000000, 'min_time': None, 'avg': 0, 'sum': 0}] 用copy模块中的deepcopy来复制列表
页:
[1]