1 a=[] 2 b=[] 3 c=[] 4 l=100 5 r=90 6 for i in range(0,5): 7 if i: 8 l=r-1 9 r-=10 10 if i==4: 11 l=0 12 r=59 13 a=[] 14 a.append(r) 15 a.append(l) 16 b=[] 17 b.append(a) 18 b.append(chr(65+i)) 19 print(b,end='\n') 20 c.append(b) 21 print(c)
结果显示:
[[90, 100], 'A']
[[80, 89], 'B']
[[70, 79], 'C']
[[60, 69], 'D']
[[59, 0], 'E']
[[[90, 100], 'A'], [[80, 89], 'B'], [[70, 79], 'C'], [[60, 69], 'D'], [[59, 0], 'E']]
这个结果是我想得到的,但是把a=[],b=[]改为,a.clear()和b.clear(),就会出现神奇的错误,答案变成了这个
[[90, 100], 'A']
[[80, 89], 'B']
[[70, 79], 'C']
[[60, 69], 'D']
[[59, 0], 'E']
[[[59, 0], 'E'], [[59, 0], 'E'], [[59, 0], 'E'], [[59, 0], 'E'], [[59, 0], 'E']]
请问这是什么原因造成的呢?
python的各种基础教程中有提到引用,copy 和deepcopy的概念。你可能是忘记了。重新看一下应该能解决了。
>>> a = [1]
>>> b = a
>>> a[0]="haha"
>>> b
['haha']
如上,因为是引用,所以当a中值变化的时候,b也跟着变化了。
c.append(b[:])
感谢,明白了