python---函数补充

默认作为函数参数的数据,是浅拷贝传递。不是和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

猜你喜欢

转载自www.cnblogs.com/ssyfj/p/9022183.html