很多的同學(xué)對拷貝都不陌生祭陷,但是在數(shù)據(jù)分析的時候會區(qū)分深拷貝淺拷貝苍凛,那么改如何區(qū)分呢?下面一起來看看吧兵志!
簡介
```python
先問問大家醇蝴,什么是拷貝?拷貝是音譯的詞想罕,其實他是從copy這個英文單詞音譯過來的悠栓,那什么是copy? copy其實就是復(fù)制一份按价,也就是所謂的抄一份惭适。深淺copy其實就是完全復(fù)制一份,和部分復(fù)制一份的意思楼镐。
```
### 前戲
```python
l1 = [1,2,3,['jason','tony']]
l2 = l1
l1[0] = 111
print(l1)??# [111, 2, 3, ['jason', 'tony']]
print(l2)??# [111, 2, 3, ['jason', 'tony']]
l1[3][0] = 'kevin'
print(l1)??# [111, 2, 3, ['kevin', 'tony']]
print(l2)??# [111, 2, 3, ['kevin', 'tony']]
"""
對于賦值運算來說癞志,l1與l2指向的是同一個內(nèi)存地址,所以他們是完全一樣的框产,在舉個例子凄杯,比如張三李四合租在一起,那么對于客廳來說秉宿,他們是公用的戒突,張三可以用,李四也可以用描睦,但是突然有一天張三把客廳的的電視換成投影了膊存,那么李四使用客廳時,想看電視沒有了酌摇,而是投影了膝舅,對吧?l1,l2指向的是同一個列表窑多,任何一個變量對列表進行改變仍稀,剩下那個變量在使用列表之后,這個列表就是發(fā)生改變之后的列表埂息。
"""
```
### 淺拷貝
```python
#同一代碼塊下:
l1 = [1, 'jason', True, (1,2,3), [22, 33]]
l2 = l1.copy()
print(id(l1), id(l2))??# 2713214468360 2713214524680
print(id(l1[-2]), id(l2[-2]))??# 2547618888008 2547618888008
print(id(l1[-1]),id(l2[-1]))??# 2547620322952 2547620322952
# 不同代碼塊下:
>>> l1 = [1, 'jason', True, (1, 2, 3), [22, 33]]
>>> l2 = l1.copy()
>>> print(id(l1), id(l2))
1477183162120 1477183162696
>>> print(id(l1[-2]), id(l2[-2]))
1477181814032 1477181814032
>>> print(id(l1[-1]), id(l2[-1]))
1477183162504 1477183162504
"""
對于淺copy來說技潘,只是在內(nèi)存中重新創(chuàng)建了開辟了一個空間存放一個新列表遥巴,但是新列表中的元素與原列表中的元素是公用的
"""
```
https://img2018.cnblogs.com/blog/1342004/201907/1342004-20190707213813739-610311010.png
### 深拷貝deepcopy
```python
# 同一代碼塊下
import copy
l1 = [1, 'jason', True, (1,2,3), [22, 33]]
l2 = copy.deepcopy(l1)
print(id(l1), id(l2))??# 2788324482440 2788324483016
print(id(l1[0]),id(l2[0]))??# 1470562768 1470562768
print(id(l1[-1]),id(l2[-1]))??# 2788324482632 2788324482696
print(id(l1[-2]),id(l2[-2]))??# 2788323047752 2788323047752
# 不同代碼塊下
>>> import copy
>>> l1 = [1, 'jason', True, (1, 2, 3), [22, 33]]
>>> l2 = copy.deepcopy(l1)
>>> print(id(l1), id(l2))
1477183162824 1477183162632
>>> print(id(0), id(0))
1470562736 1470562736
>>> print(id(-2), id(-2))
1470562672 1470562672
>>> print(id(l1[-1]), id(l2[-1]))
1477183162120 1477183162312
"""
對于深copy來說,列表是在內(nèi)存中重新創(chuàng)建的享幽,列表中可變的數(shù)據(jù)類型是重新創(chuàng)建的铲掐,列表中的不可變的數(shù)據(jù)類型是公用的。
"""
```
https://img2018.cnblogs.com/blog/1342004/201907/1342004-20190707215330225-962818898.png
###?