我从一个询问如何在Python中克隆列表的人中找到this thread,因为只做了new_list = old_list
就简单地复制了引用。
该线程说new_list = list(old_list)
可以工作,但是我已经尝试过了,并且当我编辑new_list
时,old_list
也会改变。
有什么变化还是我在这里做错了吗?
答案 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)