is 比较两个变量的ID
== 比较两个变量的值
is 的操作效率,通常要优于 '=='。因为'is'操作符不能被重载,这样,Python 就不需要去寻找,程序中是否有其他地方重载了比较操作符,并去调用。执行比较操作符'is',就仅仅是比较两个变量的ID而已。
但是'==' 不同,执行 a == b,相当于是执行 a.eq(b),而Python大部分的数据类型都会去重载 eq 这个函数,其内部处理通常会复杂一些。比如,对于列表,eq函数会去遍历列表中的元素,比较他们的顺序和值是否相等。
浅拷贝:
是指重新分配一块内存,创建一个新的对象,里面的元素是原对象中子对象的引用。因此,如果原对象中的元素不可变,那就无所谓;但如果元素可变,浅拷贝通常会带来一些副作用。
深拷贝:
是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中,因此因对象和原对象没有任何关联。另外,深度拷贝中会维护一个字典,记录已经拷贝的对象及其ID,来提高效率并防止无线递归的发生。