鱼C论坛

 找回密码
 立即注册
查看: 878|回复: 10

[已解决]列表中添加同一个字典,关于字典修改问题

[复制链接]
发表于 2020-5-18 16:44:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
修改列表一个元素里面字典的值,导致列表所有元素中字典的值发生改变,怎么解决?
>>> 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[0][0]['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[0])
47707840
>>> id(c[1])
47707840
最佳答案
2020-5-18 16:48:33
本帖最后由 永恒的蓝色梦想 于 2020-5-18 18:10 编辑

不要 c.append(b),写 c.append([b[0].copy()])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-18 16:48:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 永恒的蓝色梦想 于 2020-5-18 18:10 编辑

不要 c.append(b),写 c.append([b[0].copy()])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[0][0]['max']=66
print(c)
print((id(c[0])))
print(id(c[1]))


如果帮助到你,记得给个最佳哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 16:54:57 | 显示全部楼层
Twilight6 发表于 2020-5-18 16:49


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

白给之王就是你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 16:58:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 16:58:57 | 显示全部楼层

同意
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[0])
47707040
>>> id(c[1])
47708320
>>> c[0][0]["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[0][0]["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}]]
这个行不通。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 17:24:33 | 显示全部楼层

好了我也白给了

c.append([b[0].copy()])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[0]['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}]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 18:17:12 From FishC Mobile | 显示全部楼层
用copy模块中的deepcopy来复制列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 04:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表