获取列表的一部分并在新列表更改时更改原始列表

时间:2017-07-17 23:45:26

标签: python list python-3.x

我想知道它是否可能这样做:

a = [0, 1, 2, 3, 4]
b = a[2:]
b[0] = -1
print(a)
print(b)

得到这个:

[0, 1, -1, 3, 4]
[-1, 3, 4]

通常,你会得到这个:

[0, 1, 2, 3, 4]
[-1, 3, 4]

3 个答案:

答案 0 :(得分:4)

简要说明我的理解,如果我犯了任何错误,请告诉我。

答案是否定的。

在python中,变量是链接到对象的标记。 如果我们这样做

a = [0, 1, 2, 3, 4]
b = a
id(a) #199598920
id(b) #199598920

b只是一个链接到对象的名称标签名称。它与a共享同一个对象

enter image description here

对于你的问题,

a = [0, 1, 2, 3, 4]
id(a) #199598920
a[2:] # [2, 3, 4]
id(a[2:]) #199581576

a[2:]通过创建新列表并将第一个列表的一部分复制到新列表中,为我们提供了一个列表片段。

enter image description here

在这种情况下,您无法自动更新b[0]并列出a

答案 1 :(得分:4)

不,使用普通list这是不可能的,因为切片会返回切片的浅表副本。

但是如果你有NumPy,那么因为array返回视图的切片不是副本:

import numpy as np
a = np.array([0, 1, 2, 3, 4])
b = a[2:]
b[0] = -1
print(a)   # [ 0  1 -1  3  4]
print(b)   # [-1  3  4]

答案 2 :(得分:0)

你的意思是那样的吗? ;)

a = [0, 1, 2, 3, 4]
b = a[2:]
b[0] = a[2] = -1 
print(a)
print(b)