A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

xiequanli

初级黑马

  • 黑马币:7

  • 帖子:2

  • 精华:0

© xiequanli 初级黑马   /  2021-1-6 20:28  /  6189 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

>>> 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]]的结果

3 个回复

倒序浏览
不要更改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的地址位相同,
回复 使用道具 举报
不要更改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的地址位相同
回复 使用道具 举报
不要更改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的地址位相同
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马