首页 > 编程语言 > 详细

关于python list乘法的坑

时间:2020-12-05 17:47:29      阅读:26      评论:0      收藏:0      [点我收藏+]

关于python list乘法的坑

主要和python引用有关:

在python中使用List乘法可以构建重复元素,比如:

a = [1]*10
print(a)
a[0] = 10
print(a)

b = [{‘a‘: 1}] * 10
print(b)
b[0][‘a‘] = 10
print(b)

结果是:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[10, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[{‘a‘: 1}, {‘a‘: 1}, {‘a‘: 1}, {‘a‘: 1}, {‘a‘: 1}, {‘a‘: 1}, {‘a‘: 1}, {‘a‘: 1}, {‘a‘: 1}, {‘a‘: 1}]
[{‘a‘: 10}, {‘a‘: 10}, {‘a‘: 10}, {‘a‘: 10}, {‘a‘: 10}, {‘a‘: 10}, {‘a‘: 10}, {‘a‘: 10}, {‘a‘: 10}, {‘a‘: 10}]

list存的是int没什么关系,但是当list里面是dict时就和想的不太一样了。

原因:

对Python列表使用乘法,对于不可变对象(如数字、字符串)而言是复制值,但对可变对象(如列表、字典)而言则是复制引用,因此对于包含可变对象的列表切莫使用列表乘法,可使用列表生成式代替。

所以上述的list里面,虽然只改变了其中1个列表中的字典元素,但是整个list的dict都跟着改变了。这就是因为10个dict指向了同一个dict对象的引用

参考

【1】https://blog.csdn.net/wangxinginnlp/article/details/53201450

【2】https://blog.csdn.net/Blateyang/article/details/90179084

关于python list乘法的坑

原文:https://www.cnblogs.com/molinchn/p/14090035.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!