Python 列表问题
我在使用Python列表时遇到了一个问题。简单来说就是:
mylist1 = [...some items in a list...]
mylist2 = mylist1
mylist1.pop(i)
mylist.insert(i,item)
print(mylist1)
print(mylist2)
我的问题是,我希望mylist2能保持mylist1的原始状态。有没有什么办法可以解决这个问题呢?
6 个回答
2
使用
mylist2 = mylist1[:]
或者使用copy库来处理更复杂的情况,比如你需要对对象进行浅拷贝(copy.copy(x)
)或深拷贝(copy.deepcopy(x)
)
需要注意的是,简单的拷贝方法对列表中的列表不太管用:
>> x =[[1,2,3], [4,5,6]]
>> import copy
>> y = copy.copy(x)
>> y
[[1, 2, 3], [4, 5, 6]]
>> x[1][1]= 'oo'
>> x
[[1, 2, 3], [4, 'oo', 6]]
>> y
[[1, 2, 3], [4, 'oo', 6]]
编辑:
摘自Mark Lutz的《Learning Python》第4版,第150页:
有多种方法可以复制一个列表,包括使用内置的列表函数和标准库的copy模块。最常见的方法可能是从头到尾切片
5
与其把 mylist2
直接指向 mylist1
,不如先把 mylist1
复制一份。你可以用 list
这个构造函数来做到这一点:
mylist2 = list(mylist)
或者可以通过 copy.copy()
(或者 copy.deepcopy()
)来实现:
import copy
mylist2 = copy.copy(mylist)
copy
模块可以用来复制其他对象(比如 dict
字典)并进行深拷贝。
你可以查看这个维基页面,了解 浅拷贝和深拷贝的区别。
最后,还有一种切片语法:
mylist2 = mylist[:]
不过我 个人 不太喜欢用这种比较难懂的语法,原因可以在 这里 找到。
1
使用
mylist2 = mylist1[:]
而不是
mylist2 = mylist1
这是一个常见的方法,用来复制一个列表。