python-全局变量和函数内局部变量的细节 类型可改则变化 ,不可就不变化

当传入不可变数据类型 单独开辟内存空间 外部不变

num = 10
def edit(num):
    print("内部改前当前内容:%d 地址:%d"%(num,id(num)))#内部改前当前内容:10 地址:9756480
    num+=10
    print("内部改后当前内容:%d 地址:%d"%(num,id(num)))#内部改后当前内容:20 地址:9756800
edit(num)

print("外部当前内容:%d 地址:%d"%(num,id(num)))#外部当前内容:10 地址:9756480
  • 解决无法修改外部变量的方法 全局声明 global
num = 10
def edit():
	global num//声明当前作用域的num为全局变量就可修改外部变量
    print("内部改前当前内容:%d 地址:%d"%(num,id(num)))#内部改前当前内容:10 地址:9756480
    num+=10
    print("内部改后当前内容:%d 地址:%d"%(num,id(num)))#内部改后当前内容:20 地址:9756800
edit()

print("外部当前内容:%d 地址:%d"%(num,id(num)))#外部当前内容:10 地址:9756480

当传入可变数据类型 不单独开辟内存空间 外部可变

list1= [10,20,30]
def edit(list1):
    print("内部改前当前内容:"+str(list1))#[10, 20, 30]
    list1.append(40)
    print("内部改后当前内容:"+str(list1))#[10, 20, 30, 40]
edit(list1)

print("外部当前内容:"+str(list1))#[10, 20, 30]

可变的特例 list1+=list1 与 list1 = list1+ list1

  • list1+=list1正常改变外部
list1 = [10,20,30]

def edit(list1):
    print("内部改前当前内容:"+str(list1))#[10, 20, 30]
    list1+=list1
    print("内部改后当前内容:"+str(list1))#[10, 20, 30, 10, 20, 30]
edit(list1)

print("外部当前内容:"+str(list1))#[10, 20, 30, 10, 20, 30]
  • list1 = list1 + list1 不改变外部,局部开辟新空间
list1 = [10,20,30]

def edit(list1):
    print("内部改前当前内容:"+str(list1))# [10,20,30]
    list1 = list1 + list1
    print("内部改后当前内容:"+str(list1))#[10, 20, 30, 10, 20, 30]
edit(list1)

print("外部当前内容:"+str(list1))# [10,20,30]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章