Python 列表问题

3 投票
6 回答
1108 浏览
提问于 2025-04-17 02:07

我在使用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

这是一个常见的方法,用来复制一个列表。

撰写回答