Python 如何从列表中获取副本?

Python 如何从列表中获取副本?,python,list,Python,List,我试图从列表中获取一个元素,并对该元素(也是列表)进行一些更改。奇怪的是,更改应用于上一个列表。这是我的密码: >>>sentences[0] ['<s>/<s>', 'I/PRP', 'need/VBP', 'to/TO', 'have/VB', 'dinner/NN', 'served/VBN', '</s>/</s>'] >>>sentence = sentences[0] >>&

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

>>>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>']
>句子[0]
['/',
“I/PRP”,
“需要/VBP”,
“至/至”,
“have/VB”,
‘晚餐/NN’,
“已送达/VBN”,
'/']
>>>句子=句子[0]
>>>插入(0,startc);句子.附加(endc)
>>>句子[0]
['/',
'/',
“I/PRP”,
“需要/VBP”,
“至/至”,
“have/VB”,
‘晚餐/NN’,
“已送达/VBN”,
'/'
'/']
这就像我得到了一个指向那个元素的指针,而不是一个副本。事实上,你得到了一个“指针”。列表(以及任何可变值类型!)在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'
事实上,你确实得到了一个“指针”。列表(以及任何可变值类型!)在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'

你完全正确!在Python中,当您将列表作为参数传递给函数,或者将列表分配给另一个变量时,实际上是在传递指向它的指针

这是出于效率原因;如果每次执行上述操作时都单独复制一份1000项列表,则该程序将消耗大量内存和时间

为了在Python中解决这个问题,可以使用
=originalList[:]
=list(originalList)
复制一维列表:


如果您需要复制2D列表,请考虑使用。

您完全正确!在Python中,当您将列表作为参数传递给函数,或者将列表分配给另一个变量时,实际上是在传递指向它的指针

这是出于效率原因;如果每次执行上述操作时都单独复制一份1000项列表,则该程序将消耗大量内存和时间

为了在Python中解决这个问题,可以使用
=originalList[:]
=list(originalList)
复制一维列表:


如果您需要复制2D列表,请考虑使用。

不应该
句子=句子[0][:]
应该
句子=句子[:][0]
@xbonez No.
[0][:]
是正确的,因为在这种情况下,问题是需要复制一个子列表,而不是整个列表。不应该
句子=句子[0][:]
be
句子=句子[:][0]
@xbonez No.
[0][:]
是正确的,因为本例中的问题是需要复制一个子列表,而不是整个列表。答案包含有关用Python克隆列表的信息,但问题的前提与明确希望学习如何克隆列表的人不同。答案中包含了有关用Python克隆列表的信息,但问题的前提与明确希望学习如何克隆列表的人不同。