Cool_Breeze 发表于 2020-5-18 16:44:09

列表中添加同一个字典,关于字典修改问题

修改列表一个元素里面字典的值,导致列表所有元素中字典的值发生改变,怎么解决?
>>> 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 16:48:33

本帖最后由 永恒的蓝色梦想 于 2020-5-18 18:10 编辑

不要 c.append(b),写 c.append(.copy()])

Twilight6 发表于 2020-5-18 16:49:35

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:}

永恒的蓝色梦想 发表于 2020-5-18 16:54:57

Twilight6 发表于 2020-5-18 16:49

如果帮助到你,记得给个最佳哦~

白给之王就是你了

Twilight6 发表于 2020-5-18 16:58:07

永恒的蓝色梦想 发表于 2020-5-18 16:54
白给之王就是你了

{:10_319:}

焦健鬼 发表于 2020-5-18 16:58:57

永恒的蓝色梦想 发表于 2020-5-18 16:54
白给之王就是你了

同意{:10_275:}

Cool_Breeze 发表于 2020-5-18 17:22:44

本帖最后由 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}]]
这个行不通。

永恒的蓝色梦想 发表于 2020-5-18 17:24:33

Cool_Breeze 发表于 2020-5-18 17:22
这个行不通。

好了我也白给了

c.append(.copy()])

Cool_Breeze 发表于 2020-5-18 17:36:30

我修改了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}]

hrp 发表于 2020-5-18 18:17:12

用copy模块中的deepcopy来复制列表
页: [1]
查看完整版本: 列表中添加同一个字典,关于字典修改问题