Python new_list = list(old_list)不克隆列表

时间:2018-10-19 20:53:27

标签: python

我从一个询问如何在Python中克隆列表的人中找到this thread,因为只做了new_list = old_list就简单地复制了引用。

该线程说new_list = list(old_list)可以工作,但是我已经尝试过了,并且当我编辑new_list时,old_list也会改变。

有什么变化还是我在这里做错了吗?

4 个答案:

答案 0 :(得分:0)

您也可以尝试copy.deepcopy

>>> map(lambda n: abslines(n, 'i'), absarray)

(6562.8, 'i')
(4861, 'i')
(8498, 'i')
(8542, 'i')
(8662, 'i')
(5008.24, 'i')

答案 1 :(得分:0)

它确实复制的是列表中包含的引用,而不是引用所指向的对象。

考虑:

>>> a = [1,2,3]
>>> b = a
>>> b[1]
2
>>> b[0] = 'a'
>>> b
['a', 2, 3]
>>> a
['a', 2, 3]
>>> import copy
>>> c = copy.deepcopy(a)
>>> c[0] = 'pink'
>>> c
['pink', 2, 3]
>>> a
['a', 2, 3]
>>>

现在,如果我向>>> l1 = [{}, {}] >>> l2 = list(l1) 中添加另一个元素,它就不会神奇地出现在l1中:

l2

但是,如果我修改>>> l1.append({}) >>> l1 [{}, {}, {}] >>> l2 [{}, {}] 中一个对象的内容,则l1中相应的对象也会更改:

l2

您想要的是copy.deepcopy()

答案 2 :(得分:0)

观察以下内容:

ready() {
    super.ready();
    Polymer.RenderStatus.afterNextRender(this, () => {
       //
    }  

}

收益:

old_list = [1, 2, 3, 4]

new_list = old_list

old_list[3] = 10

相反,您可以执行以下操作:

[1, 2, 3, 10]
[1, 2, 3, 10]

收益:

old_list = [1, 2, 3, 4]

new_list = old_list[:]

old_list[3] = 5

答案 3 :(得分:0)

您可以使用

new_list = copy.deepcopy(old_list)