全局变量可变与不可变

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

下面是对可变对象与不可变对象上的global的正确理解吗?

immutable1 = 'abc'
immutable2 = '123'
mutable = {}

def change():    
    mutable['CHANGED'] = 'CHANGED' # this will change the global variable mutable
    global immutable1
    immutable1 = 'abc-CHANGED' # this will change the global variable immutable1 because global has been called
    immutable2 = '123-CHANGED' # this will not change the global immutable2 variable, because it's immutable and global has not bee declared

global唯一用于修改全局不可变变量的方法,还是可以在其他情况下使用的方法?

另一个例子:

>>> m={}
>>> i='a'
>>> 
>>> def change():
...     m['a'] = i
...     i = 'b'
... 
>>> print(m,i)
{} a
>>> change()
UnboundLocalError: local variable 'i' referenced before assignment
python global
1个回答
4
投票

global与可变性无关。无论全局变量是指向可变对象还是可变对象,它都会更改namescope,以便您可以为该名称分配不同的值。

分配全局名称时,旧值可能是可变的,也可能不是可变的,新值也可以是可变的。

d = {}
e = 6

def change():
    global d, e
    d = 3
    e = []
© www.soinside.com 2019 - 2024. All rights reserved.