深浅拷贝

1
2
3
4
5
6
import copy
a = [1,2,[3,4]]
b = copy.copy(a)
c = copy.deepcopy(a)
a[0]=11 #b、c都不变
a[2][0]=33 #b跟者a变,c不改变
  • 浅拷贝:一层独立,内层共享
    创建新对象,但只复制顶层数据,
    嵌套的子对象仍然引用原对象,
    修改嵌套内容会互相影响。

  • 深拷贝:完全独立,互不影响
    创建完全独立的新对象,
    递归复制所有层级的数据,
    新旧对象互不影响。

new与init

1
2
3
4
5
6
7
8
9
class person:
def __new__(cls,*args,**kwargs):
print("调用 __new__,创建对象")
return super().__new__(cls)

def __init__(self,name):
print("调用 __init__,初始化属性")
self.name = name
p=person("张三")

new()方法创建对象

  • 负责真正创建实例对象
  • 在内存中开辟空间
  • 返回创建好的对象
    init()方法初始化对象
  • 对象已经存在之后才调用
  • 负责给对象赋值、初始化属性
  • 没有返回值