python可變對象與不可變對象

文章目錄

  • Python 中的可變對象與不可變對象
    • 不可變對象(Immutable Objects)
    • 可變對象(Mutable Objects)
    • 重要區別

Python 中的可變對象與不可變對象

在 Python 中,對象可以分為可變對象(mutable)和不可變對象(immutable),這是 Python 中非常重要的概念,影響著對象的賦值、傳遞和修改行為。

不可變對象(Immutable Objects)

不可變對象是指創建后不能被修改的對象。如果嘗試修改,實際上是創建了一個新對象。

常見的不可變類型

  • 數字類型:int, float, bool
  • 字符串:str
  • 元組:tuple
  • 凍結集合:frozenset

示例

# 整數是不可變的
x = 10
print(id(x))  # 打印內存地址
x += 1
print(id(x))  # 內存地址改變,是新對象# 字符串是不可變的
s = "hello"
print(id(s))
s += " world"
print(id(s))  # 新字符串對象# 元組是不可變的
t = (1, 2, 3)
try:t[0] = 100  # 嘗試修改元組的第一個元素
except TypeError as e:print(e)  # 輸出錯誤信息(TypeError)

特別注意:

盡管元組本身是不可變的,但如果元組中包含可變對象,如列表,這些可變對象內部的內容是可以被修改的。這種情況下,元組的不可變性只適用于頂層結構,不影響內部元素的可變性。

tup = (1, [2, 3], 4)
tup[1].append(5)  # 修改元組中的列表
print(tup)  # 輸出 (1, [2, 3, 5], 4)

可變對象(Mutable Objects)

可變對象是指創建后可以被修改的對象,修改時內存地址不變。

常見的可變類型

  • 列表:list
  • 字典:dict
  • 集合:set
  • 字節數組:bytearray
  • 用戶自定義的類實例

示例

# 列表是可變的
lst = [1, 2, 3]
print(id(lst))  # 打印內存地址
lst.append(4)
print(id(lst))  # 內存地址不變# 字典是可變的
d = {'a': 1}
print(id(d))
d['b'] = 2
print(id(d))  # 內存地址不變# 集合是可變的
st = {1, 2, 3}
print(id(st))
st.add(4)
st.remove(3)
print(id(st))

重要區別

  1. 賦值與修改

    # 不可變對象
    a = 1
    b = a
    b = 2  # a不變# 可變對象
    x = [1, 2]
    y = x
    y.append(3)  # x也被修改
    
  2. 函數參數傳遞

    • 不可變對象作為參數時,函數內修改不會影響原值
    • 可變對象作為參數時,函數內修改會影響原值
    def modify(num, lst):num += 1lst.append(4)n = 10
    l = [1, 2, 3]
    modify(n, l)
    print(n)  # 輸出10,不變
    print(l)  # 輸出[1, 2, 3, 4],被修改
    
  3. 字典鍵的限制

    • 只有不可變對象可以作為字典的鍵
    • 可變對象不能作為字典的鍵
    d = {}
    d['key'] = 'value'  # 字符串鍵,合法
    d[1] = 'number'     # 整數鍵,合法
    d[(1, 2)] = 'tuple' # 元組鍵,合法# d[[1, 2]] = 'list'  # 報錯,列表不能作為鍵
    
  4. 集合元素的限制
    盡管集合是可變的,但也有一些操作上的限制。例如,集合只能包含不可變(可哈希)的對象。因此不能將列表或另一個集合作為元素添加到集合中。

    nested_set = {1, 2, 3}
    try:nested_set.add([4, 5, 6])  # 嘗試添加列表到集合中# nested_set.add({7, 8, 9})  # 嘗試添加另一個集合到集合中
    except TypeError as e:print(e)  # 輸出錯誤信息
    

理解可變和不可變對象的區別對于編寫正確、高效的 Python 代碼非常重要,特別是在處理對象傳遞和共享狀態時。

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

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

相關文章

DeepSeek私有化部署性能怎么樣?企業級AI落地實戰解析!

1. 私有化部署是什么?為什么企業需要它? 很多公司在考慮用AI時都會問:“DeepSeek私有化部署性能怎么樣?能不能在我們自己的服務器上跑?” 私有化部署的意思就是把AI模型裝在你自己的機房或者云服務器上,而…

SQL學習--基礎語法學習

SQL和excle對比 學習目標 單表查詢 項目背景 SQL 練習環境 SQL Online Compiler - Next gen SQL Editor 商品信息表:https://study-zhibo.oss-cn-shanghai.aliyuncs.com/test/%E5%95%86%E5%93%81%E4%BF%A1%E6%81%AF%E8%A1%A8.csv 訂單明細表:https://…

【Docker基礎-網絡】--查閱筆記4

目錄 Docker 網絡網絡類型none 網絡host 網絡bridge 網絡自定義網絡 容器間通信IP 通信Docker DNS Serverjoined 容器 容器與外部通信容器訪問外部外部訪問容器 Docker 網絡 學習Docker提供的幾種原生網絡如何創建自定義網絡容器間通信,容器于外界交互 Docker 安裝…

GPT模型架構與文本生成技術深度解析

核心發現概述 本文通過系統分析OpenAI的GPT系列模型架構,揭示其基于Transformer解碼器的核心設計原理與文本生成機制。研究顯示,GPT模型通過自回歸機制實現上下文感知的序列生成,其堆疊式解碼器結構配合創新的位置編碼方案,可有效…

AWTK-MVVM 如何讓多個View復用一個Model記錄+關于app_conf的踩坑

前言 有這么一個業務,主界面點擊應用窗口進入聲納顯示界面,聲納顯示界面再通過按鈕進入菜單界面,菜單界面有很多關于該聲納顯示界面的設置項,比如量程,增益,時間顯示,亮度,對比度等…

CrystalDiskInfo電腦硬盤監控工具 v9.6.0中文綠色便攜版

前言 CrystalDiskInfo是一個不用花錢的硬盤小幫手軟件,它可以幫你看看你的電腦硬盤工作得怎么樣,健不健康。這個軟件能顯示硬盤的溫度高不高、還有多少地方沒用、傳輸東西快不快等等好多信息。用了它,你就能很容易地知道硬盤現在是什么情況&…

數據分析-數據預處理

數據分析-數據預處理 處理重復值 duplicated( )查找重復值 import pandas as pd apd.DataFrame(data[[A,19],[B,19],[C,20],[A,19],[C,20]],columns[name,age]) print(a) print(--------------------------) aa.duplicated() print(a)只判斷全局不判斷每個 any() import p…

如何用海倫公式快速判斷點在直線的哪一側

一、海倫公式的定義與推導 1. 海倫公式的定義 海倫公式(Heron’s Formula)是用于計算三角形面積的一種方法,適用于已知三角形三邊長度的情況。公式如下: S s ( s ? a ) ( s ? b ) ( s ? c ) S \sqrt{s(s - a)(s - b)(s - c…

python推箱子游戲

,--^----------,--------,-----,-------^--,-------- 作者 yty---------------------------^----------_,-------, _________________________XXXXXX XXXXXX XXXXXX ______(XXXXXXXXXXXX(________(------ 0 [[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], [1,0,0,0,0,0,0,0,0,0,0,0,…

使用Python建模量子隧穿

引言 量子隧穿是量子力學中的一個非常有趣且令人神往的現象。在經典物理學中,我們通常認為粒子必須克服一個勢壘才能通過它。但是,在量子力學中,粒子有時可以“穿越”一個勢壘,即使它的能量不足以克服這個勢壘。這種現象被稱為“量子隧穿”。今天,我們將通過 Python 來建…

Vuex Actions 多參數傳遞的解決方案及介紹

Vuex Actions 多參數傳遞的解決方案及介紹 引言 在Vuex狀態管理模式中,Actions 扮演著至關重要的角色。它主要用于處理異步操作,并且可以提交 Mutations 來修改全局狀態。然而,在實際開發中,我們常常會遇到需要向 Actions 傳遞多…

設計模式 --- 策略模式

?策略模式(Strategy Pattern)是一種 ??行為型設計模式??,用于動態切換算法或策略??,使得算法可以獨立于客戶端變化。它通過封裝算法策略并使其可互換,提升了系統的靈活性和擴展性,尤其適用于需要多種…

【論文閱讀】RMA: Rapid Motor Adaptation for Legged Robots

Paper: https://arxiv.org/abs/2107.04034Project: https://ashish-kmr.github.io/rma-legged-robots/Code: https://github.com/antonilo/rl_locomotion訓練環境:Raisim 1.方法 RMA(Rapid Motor Adaptation)算法通過兩階段訓練實現四足機器…

QQ風格客服聊天窗口

QQ風格客服聊天窗口 展示引入方式 展示 引入方式 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

【家政平臺開發(37)】家政平臺蛻變記:性能優化與代碼重構揭秘

本【家政平臺開發】專欄聚焦家政平臺從 0 到 1 的全流程打造。從前期需求分析,剖析家政行業現狀、挖掘用戶需求與梳理功能要點,到系統設計階段的架構選型、數據庫構建,再到開發階段各模塊逐一實現。涵蓋移動與 PC 端設計、接口開發及性能優化,測試階段多維度保障平臺質量,…

PostgreSQL 的 COPY 命令

PostgreSQL 的 COPY 命令 PostgreSQL 的 COPY 命令是高效數據導入導出的核心工具&#xff0c;性能遠超常規 INSERT 語句。以下是 COPY 命令的深度解析&#xff1a; 一 COPY 命令基礎 1.1 基本語法對比 命令類型語法示例執行位置文件訪問權限服務器端COPYCOPY table FROM /p…

Sa-Token 自定義插件 —— SPI 機制講解(一)

前言 博主在使用 Sa-Token 框架的過程中&#xff0c;越用越感嘆框架設計的精妙。于是&#xff0c;最近在學習如何給 Sa-Token 貢獻自定義框架。為 Sa-Token 的開源盡一份微不足道的力量。我將分三篇文章從 0 到 1 講解如何為 Sa-Token 自定義一個插件&#xff0c;這一集將是前沿…

論文精度:基于LVNet的高效混合架構:多幀紅外小目標檢測新突破

論文地址:https://arxiv.org/pdf/2503.02220 目錄 一、論文背景與結構 1.1 研究背景 1.2 論文結構 二、核心創新點解讀 2.1 三大創新突破 2.2 創新結構原理 2.2.1 多尺度CNN前端 2.2.2 視頻Transformer設計 三、代碼復現指南 3.1 環境配置 3.2 數據集準備 3.3 訓…

解決 Ubuntu 上 Docker 安裝與網絡問題:從禁用 IPv6 到配置代理

解決 Ubuntu 上 Docker 安裝與網絡問題的實踐筆記 在 Ubuntu&#xff08;Noble 版本&#xff09;上安裝 Docker 時&#xff0c;我遇到了兩個常見的網絡問題&#xff1a;apt-get update 失敗和無法拉取 Docker 鏡像。通過逐步排查和配置&#xff0c;最終成功運行 docker run he…