网站首页 文章专栏 python 中使用字典遇到的指针坑
你没有看错, 我说的是“指针”。 这好好的python ,不是说没有指针吗?怎么我字典赋值给一些变量,但改其中一个,结果其它被赋值同一个字典的变量,都跟着变了。
不知道我上面说的,你看明白了没有。如果没有,希望下面的代码可以帮你理解:
m = {"m": "I'm M"} print(m) #{'m': "I'm M"} a = m b = m c = m print(a, b, c) #({'m': "I'm M"}, {'m': "I'm M"}, {'m': "I'm M"}) # 修改字典m m['m'] = "I'm F" # 看到了吗?全变了!!!! print(a, b, c) #({'m': "I'm F"}, {'m': "I'm F"}, {'m': "I'm F"}) a['m'] = "I'm A" print(a, b, c) #({'m': "I'm A"}, {'m': "I'm A"}, {'m': "I'm A"})
伙伴们看明白了吗?
在python 中字典变量是以指针的形式存在的,如果你把一个字典变量m赋值给其它的变量a或b 或c,其实是把字典m的指针 指 的值的内存地址 赋值给了变量a 或 b 或 c, 为了让大家清楚的了解这一个现象,用代码来一遍最简单明了了:
# 接着使用上面的变量,做实验 print(id(a)) #139843967670856 print(id(b)) #139843967670856 print(id(c)) #139843967670856
可以看到,被字典变量m 赋值的三个变量 a, b , c 内存地址是相同的,所以不管你修改三个变量中的其中一个或字典m, 其它都会跟着变化。
好坑啊。我也是在做公司的数据统计时,有一段代码需要用字典去初始化一些变量。 可在测试时发现,数据是相同的。当时我就懵逼了。挠头,发呆,调试后发现数据就是最后一个被赋值的值。脱口一个胀话, 让我想起来,上学时用的C语言。后经过上面的实验。证实了我的想法,所以在这里记录一下,望能帮到遇到相同问题的道友
解决方案如下:
d = m.copy()
就是这么简单, 原来人家有提供这个函数啊。现网上我查阅的PYTHON 基础教程里,没人提这个坑和用法。请入坑的同学自重
d