我试图从列表中获取一个元素,并对这个元素(也是一个列表)进行一些更改。奇怪的是,该更改已应用于上一个列表。这是我的代码:>>>sentences[0]['<s>/<s>', 'I/PRP', 'need/VBP', 'to/TO', 'have/VB', 'dinner/NN', 'served/VBN', '</s>/</s>']>>>sentence = sentences[0]>>>sentence.insert(0,startc); sentence.append(endc)>>>sentences[0] ['<s>/<s>', '<s>/<s>', 'I/PRP', 'need/VBP', 'to/TO', 'have/VB', 'dinner/NN', 'served/VBN', '</s>/</s>' '</s>/</s>']就像我只是指向该元素的指针,而不是副本
2 回答
慕容森
TA贡献1853条经验 获得超18个赞
实际上,您确实获得了“指针”。列表(以及任何可变值类型!)在Python中作为参考传递。
您可以通过将列表传递给list()对象构造函数或使用进行完整切片来复制列表[:]。
a = [1,2,3]
b = a
c = list(a)
d = a[:]
a[1] = 4 # changes the list referenced by both 'a' and 'b', but not 'c' or 'd'
心有法竹
TA贡献1866条经验 获得超5个赞
你说的没错!在Python中,当您将列表作为函数的参数传递,或将列表分配给另一个变量时,实际上是在将指针传递给该变量。
这是出于效率原因;如果您每次执行上述操作之一时都单独制作了1000项列表的副本,则该程序将消耗过多的内存和时间。
要在Python中克服这一问题,您可以使用= originalList[:]或复制一个一维列表= list(originalList):
sentence = sentences[0][:] # or sentence = list(sentences[0])
sentence.insert(0,startc)
sentence.append(endc)
print(sentence) # modified
print(sentences[0]) # not modified
如果您需要复制2D列表,请考虑使用列表理解。
添加回答
举报
0/150
提交
取消