python中复制列表的正确方法

一、 问题

    在写代码的时候,发现对一列表的循环始终不能完全,写法如下:   

test_list  = ['3','4','5','6','4',3','5','5','5','5']
parentLst = test_list
for eachEtm in parentLst :
    if eachEtm == '5':
        test_list.remove(eachEtm)
if len(test_list) != len(list(set(test_list))):
    .................................

    用来实现输入的数值,除元素‘5’外,其余的数值不能重复,否则报错。

    但是上述代码,经过循环删除后,test_list列表是

['3','4','6','4',3','5','5']

    添加打印后,发现eachEtm元素没有‘6’这项的循环,随后打印列表

test_list  = ['3','4','5','6','4',3','5','5','5','5']
parentLst = test_list
for eachEtm in parentLst :
    if eachEtm == '5':
        test_list.remove(eachEtm)
        log("parentLst : %s", %parentLst )
        log("test_list : %s", %test_list)
if len(test_list) != len(list(set(test_list))):
    .................................


    此时,添加打印,每轮的parentLst 和test_list 列表元素相同,即for循环检索的列表始终处于变化状态,parentLst 和test_list并非两块独立内存存储。

 二、 修改

    把

parentLst = test_list  

   修改为

parentLst = list(test_list)

即可。

 

三 、原因

parentLst = test_list  

    这种赋值方式,相当于此列表的一个引用,并没有复制test_list指向的列表;list()是列表构造函数,它会在传入的数列基础上新建列表。


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值