黑马程序员技术交流社区
标题:
li.append的问题
[打印本页]
作者:
xiequanli
时间:
2021-1-6 20:28
标题:
li.append的问题
>>> li=[]
>>> a=[1,2,3,4,5]
>>> li.append(a)
>>> li
[[1, 2, 3, 4, 5]]
>>> a[4]=1
>>> li.append(a)
>>> li
[[1, 2, 3, 4, 1], [1, 2, 3, 4, 1]]
怎么才能的到[[1, 2, 3, 4, 5], [1, 2, 3, 4, 1]]的结果
作者:
小黑白
时间:
2021-1-19 15:39
不要更改a值,重新建一个列表b,更改为[1,2,3,4,1]。原因是li.append()添加元素a,并不是把a的值添加到li列表里,实际只是增加了一个地址位指向了a。如果a发生变化,相应的li中的值也会发生变化。可以测试如下:
>>> li=[]
>>> id(li)
2287394989504
>>> a=[1,2,3,4,5]
>>> id(a)
2287394989312
>>> li.append(a)
>>> li
[[1, 2, 3, 4, 5]]
>>> id(li)
2287394989504 #与li[]地址位相同
>>> id(li[0])
2287394989312 #与a的地址位相同,
作者:
小黑白
时间:
2021-1-19 15:42
不要更改a的值,重新建个列表b。原因是li.append()增加元素只是增加了一个指向a的指针,如果a发生变化,相应li的值也会发生变化。可以测试如下:
>>> li=[]
>>> id(li)
2287394989504
>>> a=[1,2,3,4,5]
>>> id(a)
2287394989312
>>> li.append(a)
>>> li
[[1, 2, 3, 4, 5]]
>>> id(li)
2287394989504
>>> id(li[0])
2287394989312 #与a的地址位相同
作者:
小黑白
时间:
2021-1-19 15:45
不要更改a的值,重新建个列表。原因是li.append(a)增加元素只是增加了个指向a的指针,并未将a值复制到li[]中。a值变化,相应的li值也会变化。可测试如下:
>>> li=[]
>>> id(li)
2287394989504
>>> a=[1,2,3,4,5]
>>> id(a)
2287394989312
>>> li.append(a)
>>> li
[[1, 2, 3, 4, 5]]
>>> id(li)
2287394989504
>>> id(li[0])
2287394989312 #与a的地址位相同
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2