您的位置:首页 > 编程语言 > Python开发

python中复制列表的正确方法

2014-10-21 17:27 399 查看
一、 问题

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

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()是列表构造函数,它会在传入的数列基础上新建列表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: