在python中更改不可变对象的方法?

时间:2017-06-30 00:38:47

标签: python python-3.x

据我所知,整数是不可变的,我怎样才能打印4而不是2?

a = 2
def add(num):
   num = 4
print(a)    

2 个答案:

答案 0 :(得分:0)

似乎这就是你想要实现的目标:

a = 2
def add():
    global a
    a = 4

add()
print(a)

add()函数会将a的值更改为4,输出将为4。

答案 1 :(得分:0)

在Python中,变量只是保存值的篮子。如果您希望a保持不同的值,只需将其放入。就像那样简单。

a = 2 # value
a = 3 # new value

虽然整数2是不可变的,但a只是对该整数的对象引用。 a本身 - 对象引用 - 可以随时更改为引用任何对象。

正如您所发现的,您不能简单地将变量传递给函数并更改其值:

def f(a):
    a = 4
f(a)
print(a) # still 3

为什么还要3?因为在Python中对象是通过* object reference *传递的。在其他语言中,这既不是与值相同,也不是与引用相同。

函数内部的a是与函数外部不同的对象引用。这是一个不同的命名空间。如果要更改函数以使其a是另一个,最终a,则必须明确指定这是您想要的。

def f():
    global a # this makes any following references to a refer to the global namespace
    a = 4
f()
print (a) # 4

我强烈推荐this link进一步阅读。