日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 浅拷贝和深拷贝 - Python零基础入门教程

發布時間:2024/9/27 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 浅拷贝和深拷贝 - Python零基础入门教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一.Python 淺拷貝和深拷貝前言
  • 二.Python 普通的變量賦值
  • 三.Python 淺拷貝和深拷貝
    • 1.Python 淺拷貝 copy
    • 2.Python 深拷貝 deepcopy
    • 3.Python 淺拷貝和深拷貝區別
  • 四.猜你喜歡

零基礎 Python 學習路線推薦 : Python 學習目錄 >> Python 基礎入門

一.Python 淺拷貝和深拷貝前言

何謂淺拷貝/深拷貝,說得直白一點,其實就是數據拷貝,兩者到底有什么區別呢?聽著就挺迷糊的,Python 開發項目的時候說不定你就能碰上這樣的坑;

二.Python 普通的變量賦值

我們平常使用的變量賦值就是淺拷貝,即兩個變量共享同一個內存塊,相同的內存地址,一旦值發生改變,另外一個變量的值也會跟隨著一起變化,演示代碼如下:

# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:猿說編程 @Blog(個人博客地址): www.codersrc.com @File:Python 淺拷貝和深拷貝.py @Time:2021/3/29 07:37 @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!"""list1 = [1,2,3,4,5] # 普遍的變量賦值 list2 = list1 print(id(list1)) print(id(list2))# 修改列表list2的數據 list2.append(123) print(list1) print(list2)''' 輸出結果: 2251297055368 2251297055368 [1, 2, 3, 4, 5, 123] [1, 2, 3, 4, 5, 123]'''

注意:常規的變量賦值共享一個內存塊,內存地址相同,一旦值發生改變,共享同一個內存地址的所有變量值都會發生改變,可以直接通過內置函數 id 對比下內存地址即可!

三.Python 淺拷貝和深拷貝

在 Python 開發過程中,有些時候對于上面的情況并不是我們想要的,我們更加希望對賦值后的變量做修改并不影響原始變量的值,如何實現呢?這里就需要介紹一下 copy 模塊:

copy.copy – 淺拷貝,重新分配內存,只拷貝父對象,不會拷貝對象的內部的子對象;

copy.deepcopy – 深拷貝,重新分配內存,拷貝對象及其所有子對象;

1.Python 淺拷貝 copy

# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:猿說編程 @Blog(個人博客地址): www.codersrc.com @File:Python 淺拷貝和深拷貝.py @Time:2021/3/29 07:37 @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!"""import copy spam = ['A', 'B', 'C', 'D'] # 使用淺拷貝 cheese = copy.copy(spam) cheese[1] = 42 print(id(spam),spam) print(id(cheese),cheese)''' 輸出結果: 57205555 ['A', 'B', 'C', 'D'] 57208888 ['A', 42, 'C', 'D'] '''

2.Python 深拷貝 deepcopy

# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:猿說編程 @Blog(個人博客地址): www.codersrc.com @File:Python 淺拷貝和深拷貝.py @Time:2021/3/29 07:37 @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!"""import copy spam = ['A', 'B', 'C', 'D'] # 使用深拷貝 cheese = copy.deepcopy(spam) cheese[1] = 42 print(id(spam),spam) print(id(cheese),cheese)''' 輸出結果: 57205555 ['A', 'B', 'C', 'D'] 57208888 ['A', 42, 'C', 'D']'''

3.Python 淺拷貝和深拷貝區別

** 對于常規的字典 dict 或者列表 list 使用 copy 模塊的深拷貝或者淺拷貝,兩者并沒有區別!**如果字典或者列表中還有包含有子類的話,使用 copy 模塊的深拷貝和淺拷貝的話,結果就大不相同了:

copy.copy — 重新分配內存,只拷貝父對象,不會拷貝對象內部的子對象;

copy.deepcopy — 重新分配內存,拷貝對象及其所有子對象;

示例代碼如下:

# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:猿說編程 @Blog(個人博客地址): www.codersrc.com @File:Python 淺拷貝和深拷貝.py @Time:2021/3/29 07:37 @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!"""import copyprint("使用淺拷貝:") spam = [['A','E'], 'B', 'C', 'D'] # 使用淺拷貝 cheese = copy.copy(spam) cheese[0][0] = 42 print(id(spam),spam) print(id(cheese),cheese) print("***"*20)print("使用深拷貝:") spam = [['A','E'], 'B', 'C', 'D'] # 使用深拷貝 cheese = copy.deepcopy(spam) cheese[0][0] = 42 print(id(spam),spam) print(id(cheese),cheese)''' 輸出結果: 使用淺拷貝: 2179653046408 [[42, 'E'], 'B', 'C', 'D'] 2179653046920 [[42, 'E'], 'B', 'C', 'D'] ************************************************************ 使用深拷貝: 2179653086728 [['A', 'E'], 'B', 'C', 'D'] 2179653046408 [[42, 'E'], 'B', 'C', 'D']'''

由此可見:

** 如果列表或者字典沒有包含子列表或者子字典的話,使用深拷貝或者淺拷貝效果都有一樣;**

** 如果列表或者字典中存在子類的時候,只有深拷貝才會為所有的子類也重新分配內存,而淺拷貝只負責父對象,不考慮子對象!!**

四.猜你喜歡

  • Python 配置環境
  • Python 變量
  • Python 運算符
  • Python 條件判斷 if/else
  • Python while 循環
  • Python break
  • Python continue
  • Python for 循環
  • Python 字符串
  • Python 列表 list
  • Python 元組 tuple
  • Python 字典 dict
  • Python 條件推導式
  • Python 列表推導式
  • Python 字典推導式
  • 未經允許不得轉載:猿說編程 ? Python 淺拷貝和深拷貝

    總結

    以上是生活随笔為你收集整理的Python 浅拷贝和深拷贝 - Python零基础入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。