![](/img/trans.png)
[英]Why does the original list change when I change the copied list (PYTHON)
[英]Python: why my original list is affected after updating copied list
twoSeq=[['28.406925,77.285590', '28.409969,77.292279'],
['28.406925,77.285590', '28.402476,77.292956'],
['28.409969,77.292279', '28.403020,77.298851'],
['28.403020,77.298851', '28.392363,77.306091'],
['28.392363,77.306091', '28.378515,77.313990'],
['28.378515,77.313990', '28.367469,77.315308'],
['28.402476,77.292956', '28.399600,77.297313'],
['28.402476,77.292956', '28.397301,77.294096'],
['28.399600,77.297313', '28.392247,77.301909'],
['28.392247,77.301909', '28.392363,77.306091'],
['28.397301,77.294096', '28.399600,77.297313']]
def N_Seq(twoSeq):
first=twoSeq.copy()
last=twoSeq.copy()
for i in range(len(first)):
first[i].pop(0)
print(first,"--------")
for j in range(len(last)):
last[j].pop()
print(first)
N_Seq(twoSeq)
输出:
[['28.409969,77.292279'], ['28.402476,77.292956'], ['28.403020,77.298851'], ['28.392363,77.306091'], ['28.378515,77.313990'], ['28.367469,77.315308'], ['28.399600,77.297313'], ['28.397301,77.294096'], ['28.392247,77.301909'], ['28.392363,77.306091'], ['28.399600,77.297313']] --------
[[], [], [], [], [], [], [], [], [], [], []]
list.copy
创建列表的浅拷贝。 这意味着它会创建一个新列表并将对项目的引用插入其中。 在这种情况下,您应该使用copy.deepcopy
,它返回一个深层副本。
从文档:
浅拷贝和深拷贝的区别仅与复合对象(包含其他对象的对象,如列表或类实例)有关:
浅拷贝构造一个新的复合对象,然后(在可能的范围内)向其中插入对原始对象中的对象的引用。
深拷贝构造一个新的复合对象,然后递归地将原始对象中的对象的副本插入其中。
浅表副本
浅拷贝仅复制列表本身,它是对列表中对象的引用的容器。 如果包含自己的对象是可变的,并且其中一个被更改,则更改将反映在两个列表中。
深拷贝
深复制列表与原始列表完全不同。
import copy
new_list = copy.deepcopy(old_list)
供参考。
import copy
twoSeq=[['28.406925,77.285590', '28.409969,77.292279'],
['28.406925,77.285590', '28.402476,77.292956'],
['28.409969,77.292279', '28.403020,77.298851'],
['28.403020,77.298851', '28.392363,77.306091'],
['28.392363,77.306091', '28.378515,77.313990'],
['28.378515,77.313990', '28.367469,77.315308'],
['28.402476,77.292956', '28.399600,77.297313'],
['28.402476,77.292956', '28.397301,77.294096'],
['28.399600,77.297313', '28.392247,77.301909'],
['28.392247,77.301909', '28.392363,77.306091'],
['28.397301,77.294096', '28.399600,77.297313']]
def N_Seq(twoSeq):
first=copy.deepcopy(twoSeq)
last=copy.deepcopy(twoSeq)
for i in range(len(first)):
first[i].pop(0)
print(first,"--------")
for j in range(len(last)):
last[j].pop()
print(first)
N_Seq(twoSeq)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.