最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python淺拷貝與深拷貝使用方法詳解

 更新時間:2022年11月09日 14:51:46   作者:Python熱愛者  
淺拷貝,指的是重新分配一塊內存,創(chuàng)建一個新的對象,但里面的元素是原對象中各個子對象的引用。深拷貝,是指重新分配一塊內存,創(chuàng)建一個新的對象,并且將原對象中的元素,以遞歸的方式,通過創(chuàng)建新的子對象拷貝到新對象中。因此,新對象和原對象沒有任何關聯(lián)

淺拷貝和深拷貝在面試和日常的開發(fā)中都會經(jīng)常遇到

我們就從 對象賦值、淺拷貝、深拷貝 三個方面來講

一、對象賦值

In [1]:
list1 = [1, 2, ['a', 'b']]
list2 = list1
print(list1)
print(list2)
[1, 2, ['a', 'b']]
[1, 2, ['a', 'b']]
In [2]:
list1[0] = 3
print(list1)
print(list2)
[3, 2, ['a', 'b']]
[3, 2, ['a', 'b']]
In [3]:
list2[1]=[1,2]
print(list1)
print(list2)
[3, [1, 2], ['a', 'b']]
[3, [1, 2], ['a', 'b']]
In [4]:
print(id(list1))
print(id(list2))
1742901832264
1742901832264

結論:直接對象賦值,兩個對象的地址是一樣的,也就是這兩個變量指向是同一個對象,兩個變量會同步變化

二、淺拷貝

In [5]:
import copy
A = [1, 'a', ['a', 'b']]
# B = A.copy() # 淺拷貝
B = copy.copy(A) # 淺拷貝
print(A)
print(B)
print(id(A))
print(id(B))
[1, 'a', ['a', 'b']]
[1, 'a', ['a', 'b']]
1742901926344
1742901925512
兩個對象的內存地址不一樣,也就是不是同一個對象
In [6]:
# 循環(huán)分別打印每個對象中的成員的地址
# 打印A
for i in A:
    print("值 {} 的地址是:{}".format(i,id(i)))
值 1 的地址是:140724000563600
值 a 的地址是:1742860054320
值 ['a', 'b'] 的地址是:1742901889800
In [7]:
# 循環(huán)分別打印每個對象中的成員的地址
# 打印B
for i in B:
    print("值 {} 的地址是:{}".format(i,id(i)))
值 1 的地址是:140724000563600
值 a 的地址是:1742860054320
值 ['a', 'b'] 的地址是:1742901889800

int類型的1和字符串型的a都是不可變數(shù)據(jù)類型,不可變數(shù)據(jù)類型值一樣,地址一樣,值不一樣,地址就不一樣

列表[‘a’, ‘b’]是可變數(shù)據(jù)類型,可變數(shù)據(jù)類型是 變量中數(shù)據(jù)變的時候,地址不會變,值相同的兩個對象,地址是不一樣的,如果地址一樣,表示指的是同一個對象

現(xiàn)在 A[2] 和 B[2] 指向的是同一個地址,說明是同一個列表,一個改變,另外的一個也會同步改變

通常來講不可變元素包含:

int,float,complex,long,str,unicode,tuple

In [8]:
# 在 A[2] 中增加元素
A[2].append(3)
print(A)
print(B)
[1, 'a', ['a', 'b', 3]]
[1, 'a', ['a', 'b', 3]]
In [9]:
# 向A中增加元素
A.append(3)
print(A)
print(B)
[1, 'a', ['a', 'b', 3], 3]
[1, 'a', ['a', 'b', 3]]
In [10]:
A[0]=2
print(A)
print(B)
[2, 'a', ['a', 'b', 3], 3]
[1, 'a', ['a', 'b', 3]]

淺拷貝(copy.copy()):拷貝父對象,不會拷貝對象的內部的子對象,也就是子對象共用

如果子對象是不可變數(shù)據(jù)類型,那么復制的對象和原來的對象互不影響

如果是可變數(shù)據(jù)類型,那么復制的對象和原來的對象共用

In [11]:
A[2]=[1,2]
print(A)
print(B)
[2, 'a', [1, 2], 3]
[1, 'a', ['a', 'b', 3]]
In [12]:
print(id(A[2]))
print(id(B[2]))
1742901889416
1742901889800

可以看到 現(xiàn)在 A[2] 和 B[2] 的地址不一樣了,那么他們就互不影響了

其實看兩個可變數(shù)據(jù)類型是否互相影響,就是看他們的地址是否一樣

三、深拷貝

In [13]:
m = [1, 'a', ['a', 'b']]
n = copy.deepcopy(m)
print(m)
print(n)
print(id(m))
print(id(n))
[1, 'a', ['a', 'b']]
[1, 'a', ['a', 'b']]
1742900283720
1742900260680
In [14]:
# 循環(huán)分別打印每個對象中的成員的地址
# 打印m
for i in m:
    print("值 {} 的地址是:{}".format(i,id(i)))
值 1 的地址是:140724000563600
值 a 的地址是:1742860054320
值 ['a', 'b'] 的地址是:1742900341320
In [15]:
# 循環(huán)分別打印每個對象中的成員的地址
# 打印n
for i in n:
    print("值 {} 的地址是:{}".format(i,id(i)))
值 1 的地址是:140724000563600
值 a 的地址是:1742860054320
值 ['a', 'b'] 的地址是:1742900283208

可以看到,m和n兩個對象本身的地址是不一樣的,

并且m和n中成員中的可變數(shù)據(jù)類型的地址也是不一樣的,所以它們兩個是完全互不影響的

'''
學習中遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流群:711312441
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
In [16]:
m[2].append(3)
n[1]=5
print(m)
print(n)
[1, 'a', ['a', 'b', 3]]
[1, 5, ['a', 'b']]

淺拷貝(copy.copy()):拷貝父對象,不會拷貝對象的內部的子對象,也就是子對象共用

  • 如果子對象是不可變數(shù)據(jù)類型,那么復制的對象和原來的對象互不影響
  • 如果是可變數(shù)據(jù)類型,那么復制的對象和原來的對象共用

深拷貝(copy.deepcopy()):完全拷貝父對象跟子對象,復制的對象和原來的對象互不相關

四、深入解析

1、b = a.copy(): 淺拷貝, a 和 b 是一個獨立的對象,但他們的子對象還是指向統(tǒng)一對象(是引用)。

2、b = copy.deepcopy(a): 深度拷貝, a 和 b 完全拷貝了父對象及其子對象,兩者是完全獨立的。

到此這篇關于python淺拷貝與深拷貝使用方法詳解的文章就介紹到這了,更多相關python淺拷貝與深拷貝內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解python中return和print的區(qū)別和用途

    詳解python中return和print的區(qū)別和用途

    在 Python 中,return 和 print 是兩種常見的語句,用于在函數(shù)中輸出信息或返回值,盡管它們看起來相似,但它們有不同的作用和用法,本文將詳細介紹 return 和 print 在函數(shù)中的區(qū)別,并提供豐富的示例代碼,以幫助你更好地理解它們的用途
    2023-11-11
  • Python的兩種異步HTTP請求詳解

    Python的兩種異步HTTP請求詳解

    這篇文章主要介紹了Python的兩種異步HTTP請求,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 利用Python實現(xiàn)Excel的文件間的數(shù)據(jù)匹配功能

    利用Python實現(xiàn)Excel的文件間的數(shù)據(jù)匹配功能

    這篇文章主要介紹了利用Python實現(xiàn)Excel的文件間的數(shù)據(jù)匹配,本文通過一個函數(shù)實現(xiàn)此功能,通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • YOLOv5車牌識別實戰(zhàn)教程(八)Web應用與API開發(fā)

    YOLOv5車牌識別實戰(zhàn)教程(八)Web應用與API開發(fā)

    這篇文章主要介紹了YOLOv5車牌識別實戰(zhàn)教程(八)Web應用與API開發(fā),在這個教程中,我們將一步步教你如何使用YOLOv5進行車牌識別,幫助你快速掌握YOLOv5車牌識別技能,需要的朋友可以參考下
    2023-04-04
  • python讀取excel指定列數(shù)據(jù)并寫入到新的excel方法

    python讀取excel指定列數(shù)據(jù)并寫入到新的excel方法

    今天小編就為大家分享一篇python讀取excel指定列數(shù)據(jù)并寫入到新的excel方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python獲取文本文件行數(shù)的三種常用方法

    Python獲取文本文件行數(shù)的三種常用方法

    在Python中獲取文件中的行數(shù)可以幫助我們更好地處理和分析數(shù)據(jù),這篇文章主要給大家介紹了關于Python獲取文本文件行數(shù)的三種常用方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Python捕獲異常堆棧信息的幾種方法(小結)

    Python捕獲異常堆棧信息的幾種方法(小結)

    這篇文章主要介紹了Python捕獲異常堆棧信息的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • Python深度強化學習之DQN算法原理詳解

    Python深度強化學習之DQN算法原理詳解

    DQN算法是DeepMind團隊提出的一種深度強化學習算法,在許多電動游戲中達到人類玩家甚至超越人類玩家的水準,本文就帶領大家了解一下這個算法,快來跟隨小編學習一下
    2021-12-12
  • Python實現(xiàn)的旋轉數(shù)組功能算法示例

    Python實現(xiàn)的旋轉數(shù)組功能算法示例

    這篇文章主要介紹了Python實現(xiàn)的旋轉數(shù)組功能算法,結合實例形式總結分析了數(shù)組旋轉算法的原理與實現(xiàn)技巧,需要的朋友可以參考下
    2019-02-02
  • pygame實現(xiàn)飛機大戰(zhàn)

    pygame實現(xiàn)飛機大戰(zhàn)

    這篇文章主要為大家詳細介紹了pygame實現(xiàn)飛機大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論

偃师市| 沅江市| 福安市| 甘谷县| 宜宾县| 射洪县| 余庆县| 平果县| 亳州市| 尼木县| 合阳县| 日照市| 高陵县| 孙吴县| 绵阳市| 双柏县| 健康| 松阳县| 定安县| 吕梁市| 凉城县| 连云港市| 潮安县| 从化市| 绥芬河市| 临猗县| 永州市| 丰宁| 马尔康县| 荔浦县| 扬中市| 靖远县| 固阳县| 宣武区| 冷水江市| 吉水县| 绥江县| 手游| 奎屯市| 交口县| 霍林郭勒市|