Python关于a=[[]]*3的反思之前用python做了一个关于交通大数据的项目,由于之前比较赶进度,故现在会陆续更新对项目代码的一些反思。1、由此可以看出,a[0],a[1],a[2]指向的...
python 关于a=[[]]*3的反思
之前用python做了一个关于交通大数据的项目,由于之前比较赶进度,故现在会陆续更新对项目代码的一些反思。
1、
![聊聊Python中关于a=[[]]*3的反思](https://www.easck.com/d/file/p/2022/07-05/e464d307549bf88643e6908df604227e.png)
由此可以看出,a[0],a[1],a[2]指向的是同一个元素,[[]]*3表示在a中开辟三份地址,且地址相同。
2、
![聊聊Python中关于a=[[]]*3的反思](https://www.easck.com/d/file/p/2022/07-05/4d5f8db01b66797215862562ec03ab4e.png)
重新对a[0]赋值,故a[0]地址改变
3、
![聊聊Python中关于a=[[]]*3的反思](https://www.easck.com/d/file/p/2022/07-05/a823cfd796dc2d89b8bddeca473376b8.png)
对a[0][0]赋值,即改变a[0],a[1],a[2]指向的地址里的内容
注: .append\+=\-=等都不会重新赋地址,=会重新赋地址 故而,下面两条语句都会出现问题:
![聊聊Python中关于a=[[]]*3的反思](https://www.easck.com/d/file/p/2022/07-05/9ccd05c55d975dadd45626bb72735407.png)
在上述278、280两行的语句中,我都用到了[[]]*len(spts),所以只要其中某一个[]之后有.append或+=或其它不重新指向地址的行为,另外两个元素也会跟着改变。
Python a, b = b, a +b [Pythowww.cppcns.comn3常见问题]
阅读文档发现的。
>>> # Fibonacci series: ... # the sum of two elements defines the next ... a, b = 0, 1 >>> while b < 10: ... print(b) ... a, b = b, a+b ... 1 1 2 3 5 8
他实际上就是:
c = a + b a = b b = c
其他应用
1. 交换
a, b = 0, 1 a, b = b, a
评价:省去了temp中间变量
2. 斐波那契
>>> a, b = 0, 1 >>> while b < 1000: ... print(b, end=',') ... a, b = b, a+b ... 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
评价:比起数组的,递归的,确实简洁
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。










