Python內存管理:賦值、淺拷貝與深拷貝解析

賦值與共享資源

在Python中,直接賦值操作(如 list2 = list1)會導致兩個變量共享同一個內存地址。這意味著對 list1 的修改會直接影響到 list2,因為它們指向同一個對象。

  • 注意: 賦值等于完全共享資源
  • ?如果我們不希望這樣完全共享,可以使用淺拷貝和深拷貝
  • 導入copy模塊
list1 = [1,2,3,4,5]
print(list1)
list2 = list1
print(list2)
list1.append(6)
print(list1)
print(list2)

淺拷貝

淺拷貝通過 copy.copy() 實現,它創建一個新的對象,但只拷貝第一層的數據。嵌套層的數據仍然指向原來的內存地址。

  • 優點:拷貝速度快,占用空間少,拷貝效率高
import copy
list3 = [1,2,3,4,5,[6,7,8]]
list4 = copy.copy(list3)
print("list3內存地址:%s"%(id(list3)))
print("list4內存地址:%s"%(id(list4)))
print("list3內存嵌套地址:%s"%(id(list3[5])))
print("list4內存嵌套地址:%s"%(id(list4[5])))
list3.append(8)
list3[5].append(100)
print(list3)
print(list4)

深拷貝

深拷貝通過 copy.deepcopy() 實現,它完全拷貝所有層的數據,新對象與原對象完全不共享內存地址。

list5 = [1,2,3,4,5,[6,7,8]]
list6 = copy.deepcopy(list5)
print("list5內存地址:%s"%(id(list5)))
print("list6內存地址:%s"%(id(list6)))
print("list5內存嵌套地址:%s"%(id(list5[5])))
print("list6內存嵌套地址:%s"%(id(list6[5])))
list5.append(100)
list5[5].append(1000)
print(list5)
print(list6)

可變對象與不可變對象

可變對象(如列表、字典、集合)在修改時內存地址不變,

而不可變對象(如數值類型、字符串、元組)在修改時會生成新的對象,分配新的內存空間。

list7 = [1,2,3,4,5]
print("list7的原內存地址%s"%(id(list7)))
list7.append(5)
print("list7增加數據后的內存地址%s"%(id(list7)))int1 = 10
print("int1的原內存地址%s"%(id(int1)))
int1 = 100
print("int1的原內存地址%s"%(id(int1)))str1 = "hello"
print("str1的內存地址%s"%(id(str1)))
str1 = "nihao"
print("str1的內存地址%s"%(id(str1)))tuple1 = (1,2,3,4,5)
print("tuple1的內存地址%s"%(id(tuple1)))
tuple1 = (2,3,4,5,6)
print("tuple1的內存地址%s"%(id(tuple1)))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83246.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83246.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83246.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CentOS7原有磁盤擴容實戰記錄(LVM非LVM)【針對GPT分區】

一、環境 二、命令及含義 fdisk ????fdisk?是一個較老的分區表創建和管理工具,主要支持MBR(Master Boot Record)格式的分區表。MBR分區表支持的硬盤單個分區最大容量為2TB,最多可以有4個主分區。fdisk通過命令行界面進行操…

獲取相機圖像(ROS2)

文章目錄 前言一、獲取筆記本自帶相機圖像1.打開終端2.安裝usb-cam功能包3.啟動相機節點4.再打開一個終端5.啟動rqt查看圖像(1)方法一:點擊窗口選項,打開圖像話題(2)方法二:使用命令行,直接打開圖像話題 二、獲取USB相機圖像總結 …

Go 語言中接口類型轉換為具體類型

類型轉換方法 在 Go 語言中,將接口類型轉換為具體類型主要有以下幾種方法: 1. 類型斷言(Type Assertion) var i interface{} "hello"// 基本形式 s : i.(string) // 將接口i轉換為string類型 fmt.Println(s) // 輸…

ES C++客戶端安裝及使用

介紹 Elasticsearch , 簡稱 ES ,它是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful 風格接口,多數據源&…

力扣-94.二叉樹的中序遍歷

題目描述 給定一個二叉樹的根節點 root &#xff0c;返回 它的 中序 遍歷 。 class Solution { public:void inorder(TreeNode* root, vector<int>& res){//C這里&一定要加if(!root)return;inorder(root->left,res);res.push_back(root->val);inorder(ro…

《大模型微調實戰:Llama 3.0全參數優化指南》

全參數微調&#xff08;Full Parameter Fine-Tuning&#xff09;是推動大模型適應垂直領域任務的核心技術&#xff0c;尤其對于Llama 3.0這類千億級參數模型而言&#xff0c;其性能優化與場景適配能力直接決定了實際應用價值。然而&#xff0c;全參數微調面臨計算成本高、內存占…

張 提示詞優化(相似計算模式)深度學習中的損失函數優化技巧

失函數的解釋 損失函數代碼解析 loss = -F.log_softmax(logits[

《Spring Boot 4.0新特性深度解析》

Spring Boot 4.0的發布標志著Java生態向云原生與開發效能革命的全面邁進。作為企業級應用開發的事實標準框架&#xff0c;此次升級在運行時性能、云原生支持、開發者體驗及生態兼容性四大維度實現突破性創新。本文深度解析其核心技術特性&#xff0c;涵蓋GraalVM原生鏡像支持、…

協作賦能-1-制造業生產流程重構

制造業生產流程重構——從“信息孤島”到“全鏈協同” 在制造業的數字化轉型浪潮中&#xff0c;一個看似矛盾的現象正在蔓延&#xff1a;企業部署了ERP、MES、PLM等管理系統&#xff0c;卻仍未擺脫“紙質工單滿天飛、跨部門扯皮不斷”的困境。以汽車制造業為例&#xff0c;其…

基于React的高德地圖api教程002:自定義地圖樣式

文章目錄 2、自定義地圖樣式2.1 自定義底圖樣式2.2 添加衛星地圖和路網圖2.3 完整代碼下載2、自定義地圖樣式 2.1 自定義底圖樣式 高德地圖提供了多種地圖樣式,對底圖進行設置,可選樣式如下圖所示: 添加地圖樣式切換控件: <div style={{marg

谷歌Gemini生圖升級:與GPT-4o的對決,誰更勝一籌?

在人工智能技術的快速發展中&#xff0c;圖像生成&#xff08;即“生圖”&#xff09;已經成為AI領域的一大熱點。谷歌最近對其多模態模型Gemini 2.0 Flash的生圖功能進行了升級&#xff0c;從之前的“實驗版”&#xff08;Gemini 2.0 Flash Experimental Image Generation&…

OpenAI官方指南,詳細解釋了何時使用哪種AI模型

&#xff08;1&#xff09;GPT-4o ? 日常任務專家&#xff1a;頭腦風暴/會議紀要/郵件撰寫/創意生成 ? 全模態支持&#xff1a;兼容GPTs插件/數據分析/圖像生成/畫布協作/高級語音等功能&#xff0c;支持文檔/圖片/CSV/音視頻等多格式輸入 【典型用例】 ? 將會議記錄提煉…

火山引擎發展方向

火山引擎作為字節跳動旗下的企業級技術服務平臺&#xff0c;要發展客戶需要結合自身技術優勢、行業趨勢和市場需求&#xff0c;制定差異化的策略。以下是一些關鍵方向和建議&#xff1a; --- ### **一、明確目標市場定位** 1. **聚焦核心賽道** - **泛互聯網行業**&…

在 Angular 中, `if...else if...else`

在 Angular 中&#xff0c;模板語法本身并不直接支持 if...else if...else 這樣的多條件分支結構。不過&#xff0c;你可以通過使用 *ngIf 指令結合其else模板功能來實現類似的效果。下面是如何模擬if...else if...else邏輯的方法&#xff1a; 示例&#xff1a;實現if...else …

利用Backtrader實現回測策略的可視化與圖表繪制

Plotting功能是Backtrader的一大特色,能夠幫助直觀地展示交易數據、策略表現等信息,為分析和優化交易策略提供有力支持。 (一)Backtrader的主要特點 靈活性:支持多種數據源和交易接口,用戶可以根據自己的需求靈活選擇。無論是股票、期貨、外匯等不同類型的金融市場數據,…

提升英文輸入效率:基于Docker的Qwerty Learner本地搭建與使用指南

文章目錄 前言1.關于qwerty-learner2.Docker部署3.簡單使用演示4.安裝cpolar內網穿透5. 配置公網地址6. 配置固定公網地址總結 前言 小伙伴們&#xff0c;你們有沒有遇到過這種情況&#xff1a;中文輸入流暢自如&#xff0c;一到英文模式就變成了新手司機&#xff1f;別擔心&a…

BUUCTF——shrine

BUUCTF——shrine 進入靶場 只有一串代碼 import flask import os app flask.Flask(__name__) app.config[FLAG] os.environ.pop(FLAG) #程序從環境變量 FLAG 讀取一個敏感值&#xff0c;并存儲在 app.config[FLAG] 中。 #安全問題&#xff1a;如果攻擊者能訪問 app.con…

【Python】對象生命周期全解析

Python對象生命周期全解析 在Python中&#xff0c;一個對象從創建到銷毀會經歷一系列過程&#xff0c;理解這些過程對于編寫高效、可靠的Python代碼非常重要。下面我將詳細講解Python對象的完整生命周期。 1. 對象創建階段 (1) 內存分配 當使用類實例化時(obj MyClass())&…

科學養生指南:解鎖健康生活的密碼

健康是人生最寶貴的財富&#xff0c;科學養生則是守護這筆財富的關鍵。即使拋開傳統中醫理論&#xff0c;現代科學也為我們提供了諸多實用的養生方法。? 合理飲食是健康養生的基石。人體需要碳水化合物、蛋白質、脂肪、維生素和礦物質等多種營養物質維持運轉。日常飲食應遵循…

深入解析 Python 應用日志監控:ELK、Graylog 的實戰指南

深入解析 Python 應用日志監控:ELK、Graylog 的實戰指南 引言 在現代應用開發中,日志不僅僅是用于記錄錯誤和調試信息,它更是系統運行狀況的窗口,幫助開發者和運維人員監控、優化應用性能。Python 作為廣泛應用的開發語言,其應用日志管理的重要性不言而喻。而 ELK(Elas…