我看到了一些相关的问题,我认为我的问题仍然没有答案。如何获得列表成员的指针(引用)?说,我有:
>>> a = [None]
>>> d = a[0]
>>> d = 3
我希望得到:
>>> a
[3] # But I get [None] of course.
在Python中有可能吗?或者我该如何实现呢?
更新
我的最终目标是更改来源。
答案 0 :(得分:2)
不,那是不可能的。您无法存储对列表中某个位置的引用,并尝试稍后通过分配进行更新。
如果要实现变通方法,则可能需要使用闭包来捕获列表中所需索引的引用。这是一个例子:
# Here's my list
mylist = [1, 2, 3, 4]
# Save a reference to the list using a function to close over it
def myref(x): mylist[1] = x
# Update the referenced value to 7
myref(7)
# mylist is now [1, 7, 3, 4]
print mylist
您仍然使用myref(7)
语法而不是myref = 7
语法,因为在Python中无法重载赋值运算符,但我认为这对您有用。
在你提到的其他一个答案的评论中,你提到你实际上正在处理一个n维列表,并且你想保存一个参考,以便你可以在以后索引不能更新它时更新它。在范围内。这对于那种情况也很有效。这是一个例子:
# My 3D list
list3D = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
# Find
def findEntry(data, x):
for i, page in enumerate(data):
for j, row in enumerate(page):
for k, col in enumerate(row):
if col == x:
def myref(y): data[i][j][k] = y
return myref
# Get a reference to the first cell containing 4
updater = findEntry(list3D, 4)
# Update that cell to be 44 instead
updater(44)
# list3D is now [[[1, 2], [3, 44]], [[5, 6], [7, 8]]]
print list3D
答案 1 :(得分:1)
使用ref单元格比使用指针更好。从python的角度来看,指针是一个遥远的概念。你可以从列表中创建一个便宜的ref单元格。
pointer = [3]
pointer[0] = 5 #change value of ref cell
pointer[0] #get value of ref cell
答案 2 :(得分:0)
将它包装在课堂上
>>> class A(object):
... pass
...
>>> a = [A()]
>>> a[0]
<__main__.A object at 0x1004ad850>
>>> a[0].x = 5
>>> a
[<__main__.A object at 0x1004ad850>]
>>> b = a[0]
>>> b.x
5
>>> b.x = 6
>>> a[0].x
6