1)深浅拷贝
浅拷贝重新分配一块内存,创建一个新的对象,但里面的元素是对各个子对象的引用。深拷贝重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中,因此新对象和原对象没有任何关联。列表可以通过切片实现浅拷贝,copy.copy()(list set dict)都可以实现浅拷贝。tuple不会通过切片实现浅拷贝(str一样),都是开辟新内存,存储原对象的子对象的引用。copy.deepcopy()新存储空间存储新对象。
2)is和==的区别
==是对值进行判断,is是判断id也就是地址
3)闭包和装饰器的概念
在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包。闭包可以提高代码的复用性。闭包引用了外部函数的局部变量,则外部函数的局部变量没有释放内存消耗内存。
装饰器,python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,好处就是不改变原函数的代码前提下给函数增加新功能。具体来说,就是定义一个新的函数,def xx(func1) 这个新的函数要传入的参数是老函数,也就是要被装饰的函数,而新函数里面还要有一个函数,在这个子函数中调用老函数,并且在其基础上加上新功能,最后在新函数中将子函数返回。
4)可变对象、不可变对象
可变:列表、字典、集合
不可变:整数、字符串、浮点数、布尔型、元组
值传递:指的是实参类型为不可变类型(数字,字符串,元组),形参改变不影响实参。
引用传递(地址传递):实参类型为可变类型(列表、字典、集合,np矩阵,torch.tensor),形参变化实参也变化。