例如
b = 4
c = []
c.append(b)
print(c)
b += 2
print(c)
我希望我能得到
4
6
但我得到了
4
4
只要有机会我就可以将元素添加为指针。然后,如果我用 c[0] 引用该元素,我就会引用 b?
这里
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
没有改变
你可以通过课堂来做到这一点:
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
请参阅下面的链接以了解该参考在 python 中的工作原理: 如何通过引用传递变量?
所以,简而言之, python 对象,即
booleans
、integers
、floats
、strings
和 tuples
是 immutable,这意味着在创建对象并为其分配一些值后,您无法修改该值.
因此,当您执行
b += 2
时,此处 b
将指向新的内存引用。
证明:
>>> b=10
>>> id(b)
1734146112
>>> b+=2
>>> id(b)
1734146144
>>>
您也可以通过调整
Number
类的默认行为来做到这一点,但要注意;你应该非常小心地使用它,因为你可能不需要每个类都有这种行为。
这个方法可能会帮助你......
b = 4
c = []
c.append("b") # variable name as a string
print(eval(c[0]))
b += 2
print(eval(c[0]))
输出是
4
6
毫无疑问,这种方法会冒犯一些人,但是作为一个已经放弃的 C 程序员,我发现指向变量的指针很方便,它可以使代码更易于阅读。
也适用于函数名称!