原因是行
stringvar = "bar"
是模糊的,也可能是指一个@R_502_1986@, 或者 它可以被称为创建新的本地变量stringvar
。在这种情况下,除非global
已使用关键字,否则Python默认将其假定为局部变量。
但是,线
dictvar['key1'] += 1
完全是明确的。它只能引用@R_502_1986@dictvar
,因为dictvar
必须已经存在该语句才不会引发错误。
这并非仅针对字典-列表也是如此:
listvar = ["hello", "world"]
def listfoo():
listvar[0] = "goodbye"
或其他种类的物体:
class MyClass:
foo = 1
myclassvar = MyClass()
def myclassfoo():
myclassvar.foo = 2
每当使用mutation操作而不是重新绑定操作时,都是如此。