当传入不可变数据类型 单独开辟内存空间 外部不变
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 = [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]