【发布时间】:2018-04-16 07:07:14
【问题描述】:
下面只是一个简单的代码:
import numpy as np
x=np.array([1,2])
y=[1,2]
L=1
def set_L(x,y,L):
x[0]+=1
y[0]+=1
L+=1
print(id(x))
print(id(y))
print(id(L))
我发现函数set_L()中数组x和list y是一样的,这是否意味着默认list和array是全局变量?但是变量 L 在函数 set_L() 中不是全局变量。我很困惑为什么 Python 是这样设计的?
【问题讨论】:
-
你可以在副本中找到答案
-
区别之一是可变性。
-
@hpaulj 虽然可变性会影响结果,但它与范围和赋值语义无关
-
这个问题将两件事混为一谈——变量范围,以及
+=如何修改对象。数组和列表是可变的,可以在不更改id的情况下更改,而标量则不是。id(L)是其值的id,id(1)或id(2)(在 Cython 中,小的正整数具有唯一的 id)。
标签: python arrays list numpy global-variables