Глобальный на изменяемой против неизменной - PullRequest
0 голосов
/ 20 октября 2019

Является ли следующее правильное понимание 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

1 Ответ

4 голосов
/ 20 октября 2019

global не имеет ничего общего с изменчивостью. Он изменяет scope name , независимо от того, ссылается ли global на изменяемый или неизменный объект, так что вы можете назначить другое значение имени.

КогдаПрисваивая глобальное имя, старое значение может быть или не быть изменяемым, и новое значение также может быть либо.

d = {}
e = 6

def change():
    global d, e
    d = 3
    e = []
...