我不明白为什么“ var”的行为符合预期(在函数内部,它是局部的,并且未通过函数中的分配进行修改),而数组在默认情况下是全局的,而其全局值则通过函数内部的分配...
我认为最后一条语句应该为数组和var打印[0,0]值,而仅为var打印“ 0”值。...
array = [0, 0]
var = '0'
def A():
if 'array' in locals():
print('locale A', array)
if 'array' in globals():
print('globale A', array)
print('A', var)
def B():
array[1] = 'B'
if 'array' in locals():
print('locale B', array)
if 'array' in globals():
print('globale B', array)
var = 'B'
print('B', var)
A()
B()
print('outside array', array)
print('outside var', var)
它打印 外部数组[0,'B']#我预期为[0,0]
外部var 0#符合预期
答案 0 :(得分:1)
修改array
的内容时,实际上是在修改代表列表的对象。也就是说,如果您更改元素或将其追加到该列表,则该列表仍然是同一对象,只是对其进行了修改。另一方面,如果您分配给var
,则会在范围内为该名称分配一个新对象。您不是通过将'0'
分配给同一变量来修改'B'
。
答案 1 :(得分:1)
Python变量是对对象的引用。语句$ conda env create --prefix ./env --file environment.yml
$ conda activate ./env
$ pip install -r requirements.txt
创建一个名为var = 'B'
的新局部变量,该变量引用字符串var
。由于该变量是局部变量,因此无法在创建该变量的函数之外访问。
'B'
未创建新列表。它将(全局)列表array[1] = 'B'
的第一项更改为array
。