一、赋值
二、浅拷贝(shallowcopy)
浅拷贝会创建新的对象,其内容非原对象本身的引用,而是原对象内第一层对象的引用,
浅拷贝有三种形式:
切片操作:b = a[:]或者b = [x for x in a];
工厂函数:b = list(a);
copy函数:b = copy.copy(a)
在这种情况下列表a 和列表b是不同的对象,修改b理论上不会影响到列表a,
但是要注意的是浅拷贝之所以只拷贝了一层,在列表a中有一个嵌套的list,如果我们修改了它,情况就不一样了,比如:a[3].append(“4”),查看列表b也发生了变化,这是因为我们修改了嵌套的list,修改外层元素,会修改它的引用,让他指向别的位置,修改嵌套列表中的元素,地址未发生变化,指向的都是用一个位置
三、深拷贝(deepcopy)
四、拷贝的注意点
对于非容器类型,如数字,字符,以及其他的’’原子’’类型,没有拷贝一说,产生的都是原对象的引用.
如果元组变量值包含原子类型的对象,即使采用了深拷贝,也只能得到浅拷贝.因为元组是不可变类型.
文章来源: 赋值、浅拷贝、和深拷贝的区别