首页 新闻 会员 周边 捐助

python的list清空操作不同造成结果不同,为什么啊?

0
悬赏园豆:20 [已解决问题] 解决于 2017-03-16 13:39
 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']]

请问这是什么原因造成的呢?

佰大于的主页 佰大于 | 初学一级 | 园豆:159
提问于:2017-03-09 23:47
< >
分享
最佳答案
0

python的各种基础教程中有提到引用,copy 和deepcopy的概念。你可能是忘记了。重新看一下应该能解决了。

>>> a = [1]
>>> b = a
>>> a[0]="haha"
>>> b
['haha']

如上,因为是引用,所以当a中值变化的时候,b也跟着变化了。

c.append(b[:])
收获园豆:20
墨镜带佬星 | 老鸟四级 |园豆:2310 | 2017-03-10 03:33

感谢,明白了

佰大于 | 园豆:159 (初学一级) | 2017-03-16 13:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册