为了账号安全,请及时绑定邮箱和手机立即绑定

如何从列表中获取副本?

如何从列表中获取副本?

蝴蝶不菲 2021-03-22 09:18:27
我试图从列表中获取一个元素,并对这个元素(也是一个列表)进行一些更改。奇怪的是,该更改已应用于上一个列表。这是我的代码:>>>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'


查看完整回答
反对 回复 2021-03-23
?
心有法竹

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列表,请考虑使用列表理解。


查看完整回答
反对 回复 2021-03-23
  • 2 回答
  • 0 关注
  • 258 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信