数组不是局部的,而变量是局部的

时间:2019-12-22 11:10:22

标签: python python-3.x

我不明白为什么“ 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#符合预期

2 个答案:

答案 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