關於python list乘法的坑


關於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM