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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章