我想知道它是否可能这样做:
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]
答案 0 :(得分:4)
简要说明我的理解,如果我犯了任何错误,请告诉我。
答案是否定的。
在python中,变量是链接到对象的标记。 如果我们这样做
a = [0, 1, 2, 3, 4]
b = a
id(a) #199598920
id(b) #199598920
b
只是一个链接到对象的名称标签名称。它与a
共享同一个对象
对于你的问题,
a = [0, 1, 2, 3, 4]
id(a) #199598920
a[2:] # [2, 3, 4]
id(a[2:]) #199581576
a[2:]
通过创建新列表并将第一个列表的一部分复制到新列表中,为我们提供了一个列表片段。
在这种情况下,您无法自动更新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)