Python中赋值、浅拷贝、深拷贝的区别。
Python中的赋值
Python中赋值语句是最常见的几种语句之一。Python中赋值语句的作用就是在内存中建立一个对象并将他的地址传给被赋值对象。需要注意的是变量(也就是对象)一开始是没有地址的。因为python不用声明变量,所以变量一开始没有被分配地址。这与java,c不同。
系统将2的地址传给变量a和b,同时a将他的地址传给c。所以他们三个地址相同。
如果之后将一个新的地址传给a,那么c的值还是2。因为a的地址变了,而c的地址没变。如图
Python中的浅拷贝
浅拷贝的实质就是复制容器中元素的地址,下面看一个例子:
其中a[:],表示将a容器系统复制并在内存中又开辟了一个空间给它,最后将它的地址传给b,所以a和b的地址不同。但a和b容器中的元素的地址却相同。这就证实了浅拷贝的实质就是复制容器中元素的地址。
Python中的深拷贝
深拷贝就是完全拷贝了整个副本。原对象改变不影响新对象变化。如图:
总结:
1. 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址(旧瓶装旧酒)。
2. 浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素(新瓶装旧酒)。
3. 深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。也就是说(新瓶装新酒)。