默认作为函数参数的数据,是浅拷贝传递。不是和C等语言一样,产生一个临时变量。
class T: def __init__(self,num): print(id(num)) self.num = num print(id(self.num)) def printf(self): num = self.num print(id(num)) #数据没有被改变过,所以这里的所有相关num变量都是指向同一个内存空间 if __name__ == "__main__": num = 10 print(id(num)) t = T(num) t.printf()
1385649216 1385649216 1385649216 1385649216
由输出结果可以知道,这些变量引用的都是同一个内存空间的值。属于浅拷贝。只有当我们在函数中去修改该变量的时候,才会重新去生成一个局部变量内存空间去存放数据,当函数执行后,数据被回收。
def func(num): print(id(num),num) num = 13 #修改数据,分配新的局部变量空间,函数退出,被回收 print(id(num),num) if __name__ == "__main__": n = 12 print(id(n),n) func(n) print(id(n),n) print("end")
1385649280 12 1385649280 12 1385649312 13 #此时被修改了数据,内存中为这个局部变量重新分配了空间,修改不影响原来的数据 1385649280 12 end