在python中创建列表的一部分别名

db_*_*db_ 4 python list pointer-aliasing

有没有办法在python中获取列表的一部分的别名?

具体来说,我希望发生相同的事情:

>>> l=[1,2,3,4,5]
>>> a=l
>>> l[0]=10
>>> a
[10, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

>>> l=[1,2,3,4,5]
>>> a=l[0:2]
>>> l[0]=10
>>> a
[1, 2]
Run Code Online (Sandbox Code Playgroud)

Pad*_*ham 6

如果numpy是一个选项:

import  numpy as np

l = np.array(l)

a = l[:2]

l[0] = 10

print(l)
print(a)
Run Code Online (Sandbox Code Playgroud)

输出:

[10  2  3  4  5]
[10  2]
Run Code Online (Sandbox Code Playgroud)

使用基本索引进行切片会返回具有numpy的视图对象,因此任何更改都会反映在视图对象中

或者使用带有array.arraymemoryview:

from array import array

l = memoryview(array("l", [1, 2, 3, 4,5]))

a = l[:2]

l[0]= 10
print(l.tolist())

print(a.tolist())
Run Code Online (Sandbox Code Playgroud)

输出:

[10, 2, 3, 4, 5]
[10, 2]
Run Code Online (Sandbox Code Playgroud)