Python 是否可以获取列表成员的指针?

Python 是否可以获取列表成员的指针?,python,pointers,python-3.4,Python,Pointers,Python 3.4,我看到了一些相关的问题,我想我的问题仍然没有答案。如何获取列表成员的指针(引用)?我有: >>> a = [None] >>> d = a[0] >>> d = 3 我希望得到: >>> a [3] # But I get [None] of course. 在Python中有可能吗?或者我该如何实现这一点 更新 我的最终目标是更改源使用ref单元格比使用指针更好。从python的角度来看,指针是一个遥远的概念。您可以从

我看到了一些相关的问题,我想我的问题仍然没有答案。如何获取列表成员的指针(引用)?我有:

>>> a = [None]
>>> d = a[0]
>>> d = 3
我希望得到:

>>> a
[3] # But I get [None] of course.
在Python中有可能吗?或者我该如何实现这一点

更新


我的最终目标是更改

使用ref单元格比使用指针更好。从python的角度来看,指针是一个遥远的概念。您可以从列表中创建一个廉价的ref单元格

pointer = [3]
pointer[0] = 5 #change value of ref cell
pointer[0] #get value of ref cell

不,那是不可能的。您不能将对位置的引用存储在列表中,并在以后通过分配尝试更新它

如果要实现变通方法,则可能需要使用闭包捕获对列表中所需索引的引用。下面是一个例子:

# 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
# 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
您无法使用
myref(7)
语法,而不是
myref=7
语法,因为在Python中无法重载赋值运算符,但我认为这对您很有用

在您对另一个答案的评论中,您提到您实际上正在处理一个n维列表,并且您希望保存一个引用,以便稍后在索引不在范围内时更新它。这在这种情况下也很有效。下面是一个例子:

# 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
# 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
在课堂上把它包起来

>>> 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
>>A类(对象):
...     通过
... 
>>>a=[a()]
>>>a[0]
>>>a[0].x=5
>>>a
[]
>>>b=a[0]
>>>b.x
5.
>>>b.x=6
>>>a[0].x
6.

所以这些列表(如原始问题中)实际上就是列表列表,例如
a=[[None]]]
。这是一个简单的索引调用。我有一个N维数组,我需要一个指向某个成员的指针,因为索引“现在”不可用。这很难解释,现在真的没关系。这就是我想听到的。是的,这就是我现在(和lambdas)所拥有的。有了指针,我的代码会更紧凑…@Necronomicron-你用lambdas做的?当我编写这个示例时,我尝试使用lambdas,但后来我意识到不能在lambda中执行赋值,所以我改为使用
def
。对不起,lambdas和函数。当然,我们不能在lambdas中完成作业。:)是的,但数组是
a=[None]
。无论如何,在我的例子中,包装会使情况变得更糟。仍然有效,在类中包装None。