你能在Python列表中保存指针吗?

问题描述 投票:0回答:4

例如

b = 4
c = []

c.append(b)

print(c)

b += 2

print(c)

我希望我能得到

4
6

但我得到了

4
4

只要有机会我就可以将元素添加为指针。然后,如果我用 c[0] 引用该元素,我就会引用 b?

python list pointers reference
4个回答
0
投票

这里

c
b
是不同的变量,其中
c
是列表,而
b
是整数,所以如果你在
b
上添加一些,并不意味着
c
会被更新,但如果你添加一些
b
上的编号,然后再次将其附加到
c
上 会有改变

b = 4
c = []

c.append(b)
print(c)
b += 2
c.append(c)
print(c)

你会得到的是

[4, 6]

我认为很明显,你的问题中的

c
没有改变


0
投票

你可以通过课堂来做到这一点:

class Number:
    def __init__(self, number):
        self.number = int(number)

    def __str__(self):
        return str(self.number)

    def __repr__(self):
        return self.__str__()

    def __add__(self, other):
        self.number = self.number + other


b = Number(4)
c = []
c.append(b)
print(c)
b += 2
print(c)

您将得到:

4
6

0
投票

请参阅下面的链接以了解该参考在 python 中的工作原理: 如何通过引用传递变量?

所以,简而言之, python 对象,即

booleans
integers
floats
strings
tuples
immutable,这意味着在创建对象并为其分配一些值后,您无法修改该值.

因此,当您执行

b += 2
时,此处
b
将指向新的内存引用。

证明:

>>> b=10
>>> id(b)
1734146112
>>> b+=2
>>> id(b)
1734146144
>>>

但是,正如@yoav提到的上面

您也可以通过调整

Number
类的默认行为来做到这一点,但要注意;你应该非常小心地使用它,因为你可能不需要每个类都有这种行为。


0
投票

这个方法可能会帮助你......

b = 4
c = []
c.append("b")  # variable name as a string
print(eval(c[0]))
b += 2
print(eval(c[0]))

输出是

4 
6

毫无疑问,这种方法会冒犯一些人,但是作为一个已经放弃的 C 程序员,我发现指向变量的指针很方便,它可以使代码更易于阅读。

也适用于函数名称!

© www.soinside.com 2019 - 2024. All rights reserved.