赋值:指向同一个对象
浅拷贝:b = a.copy()或者import copy b = copy.copy(a) a,b指向不同对象,但是子对象指向同一对象
ex:
a = [1, 2, 3, 4, ['a', 'b']]
b = a.copy()
a.append(5)
print("b",b)
a[4].append("c")
print("b",b)
还可以分别打印id(a),id(b),id(a[4]),id[b[4]]查看对象和子对象的内存地址,可以发现a,b的地址不一样,但是a[4],b[4]的地址相同。
深拷贝:父对象和子对象都指向不同对象。
__slots__:__slots__变量
定义的属性仅对当前类实例起作用,对继承的子类是不起作用的
闭包: 在子函数中想修改主函数的变量时,需使用nonlocal关键字。nonlocal表示这个变量不是局部变量空间的变量,需要向上一层变量空间找这个变量。若主函数的变量是可变数据类型,可以在子函数直接修改。并且每次调用内函数都在使用同一份闭包变量。
def outer(x):
def inner(y):
nonlocal x
x+=y
return x
return inner
a = outer(10)
print(a(1)) #11
print(a(3)) #14