如何从列表中获取副本?

我试图从列表中获取一个元素,并对这个元素(也是一个列表)进行一些更改。奇怪的是,该更改已应用于上一个列表。这是我的代码:


>>>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>']

就像我只是指向该元素的指针,而不是副本


蝴蝶不菲
浏览 259回答 2
2回答

慕容森

实际上,您确实获得了“指针”。列表(以及任何可变值类型!)在Python中作为参考传递。您可以通过将列表传递给list()对象构造函数或使用进行完整切片来复制列表[:]。a = [1,2,3]b = ac = list(a)d = a[:]a[1] = 4&nbsp; # changes the list referenced by both 'a' and 'b', but not 'c' or 'd'

心有法竹

你说的没错!在Python中,当您将列表作为函数的参数传递,或将列表分配给另一个变量时,实际上是在将指针传递给该变量。这是出于效率原因;如果您每次执行上述操作之一时都单独制作了1000项列表的副本,则该程序将消耗过多的内存和时间。要在Python中克服这一问题,您可以使用= originalList[:]或复制一个一维列表= list(originalList):sentence = sentences[0][:]&nbsp; &nbsp; &nbsp;# or sentence = list(sentences[0])sentence.insert(0,startc)sentence.append(endc)print(sentence)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # modifiedprint(sentences[0])&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # not modified如果您需要复制2D列表,请考虑使用列表理解。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python