此处的ls 为列表,在函数中可以对列表进行修改
而这个问题中 却没有发生改变
问题所在,第二题中的函数内部的img1 与外部的 img1 不是同一个内存地址
而第一个问题中的ls为外部的全局变量
下面的执行结果说明 不是同一个变量【这里说明一下 其实函数内部img1变量与外部的img2的地址是一样的】
python 变量赋值都是 【引用赋值、而不是值赋值】
说一下 内变量的理解(个人理解,可能有不对的地方希望指导)
- 普通变量
- 此时的两个变量使用的不是同一个内存地址
a = 10 #a 为全局变量
def num():
a = 20 #a 为局部变量
print("函数内部a=",id(a))
num()
print("函数外部a=",id(a))
- 若想使用外部的全局变量 使用关键字global
a = 10 #a 为全局变量
def num():
global a
a = 20 #a 此时引用的是全局变量
print("函数内部a=",id(a))
num()
print("函数外部a=",id(a))
- 若函数中引用没有定义的局部变量,则会在全局变量中寻找
a = 10 #a 为全局变量
b = 1
def num():
a = b #此时函数内部没有局部变量b,则会使用全局变量
print("函数内部a=",id(a))
num()
print("函数外部b=",id(b))
print("函数外部a=",id(a))
- 若全局变量不存在,则会报错
a = 10 #a 为全局变量
#b = 1
def num():
a = b #此时函数内部没有局部变量b,则会使用全局变量
print("函数内部a=",id(a))
num()
print("函数外部b=",id(b))
print("函数外部a=",id(a))
- 上述中 若变量为列表
- 在函数中,若应用全局列表会改变列表的值【如题1】
- 若在函数中重新创建一个列表 进行赋值不是去改变则重新建立列表【如题2】