精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python 不可變對象真的不可變嗎

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-03 11:48 ? 次閱讀

在日常的學習和工作中,經常會遇到"不可變對象"的問題,但是隨著接觸Python這門語言的時間越來越多,遇到的坑越來越奇怪。我不禁產生了一個疑問:不可變對象真的不可變嗎?

我們知道元組就是"不可變對象",當你想嘗試給一個元組賦值的時候,它會報錯:

圖片

請注意報錯的語言: "does not support item** assignment** ", 元組對象不支持賦值操作。

例1

讓我們來看看下面這樣的操作:

圖片

盡管報了一個錯,但是它變量的值已經被改變了。

原因

其實,這里主要是因為 += 操作對于“不可變對象”會產生新的變量并綁定到原有變量上。但是又由于+=中的"="號,執行了一次對元組對象的賦值操作,這是不允許的,因此報了錯,但新的對象已經被綁定到了原有變量中,因此我們可以看到變量的值發生了改變。

例2

還有一種情況是這樣的:

圖片

這里完全沒有報錯,為什么呢?因為append并不涉及到賦值操作,元組只是不允許賦值,并沒有不允許append和extend啊,所以稱元組為“不可變對象” 實在是太不嚴謹了!

深一點

其實如果你知道元組中存放的是元素所對應的地址(ID),就好理解多了,append和extend僅僅是修改了列表的元素,而列表本身的ID并沒有發生變化,只有當賦值操作執行的時候,ID才會發生變化,而這種情況是元組不允許發生的。

圖片

因此,要避免踩上這些坑,忘掉元組是“不可變對象”這樣不嚴謹的表述形式(當然從地址的角度來講它是對的,元組內部所有元素的ID都不可變),請這樣記: 元組是不可賦值對象

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28329
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84456
收藏 人收藏

    評論

    相關推薦

    #Python3教程 區分可變不可變對象

    編程語言python
    電子技術那些事兒
    發布于 :2022年08月29日 21:24:39

    [8.4.2]--8.4.2可變對象不可變對象

    python
    jf_75936199
    發布于 :2023年03月13日 17:21:38

    Python語言基礎:可變類型與不可變類型(1)#Python語言基礎

    編程語言python
    學習電子
    發布于 :2023年04月06日 16:08:55

    Python語言基礎:可變類型與不可變類型(2)#Python語言基礎

    編程語言python
    學習電子
    發布于 :2023年04月06日 16:10:16

    201. Python函數提高:13.19 可變不可變類型

    python
    充八萬
    發布于 :2023年07月11日 20:04:12

    Python中的列表:可變性,實用程序和可訪問性

    does not support item assignment  因此,即使將不可變對象存儲在列表中,python也不會更改對象的屬性。  列表可以具有任何數據類型作為其成員,無
    發表于 08-12 18:03

    ExaGrid榮獲“年度企業備份硬件供應商”和“年度不可變存儲公司”兩項大獎

    超大型系統。ExaGrid提供唯一具有非面向網絡的層級、延遲刪除功能以及不可變對象以從勒索軟件攻擊中恢復的雙層備份存儲方案,因此我們特別榮幸地獲得了‘年度不可變存儲公司’獎。”ExaGrid分層備份存儲
    發表于 10-14 12:04

    輸出電壓可變的高精度基準電源電路

    (特征:高精度、電壓可變)類似REF-02C屬于高精度、輸出電壓不可變的基
    發表于 05-13 09:10 ?1239次閱讀
    輸出電壓<b class='flag-5'>可變</b>的高精度基準電源電路

    java中string不可變的原因

    區分對象對象的引用 對于Java初學者, 對于String是不可變對象總是存有疑惑。看下面代碼: String s = ABCabc;System .out.println( s =
    發表于 09-27 13:24 ?0次下載
    java中string<b class='flag-5'>不可變</b>的原因

    什么是不可變對象 不可變對象存儲可以抵御哪些威脅

    什么是不可變對象? 屬性變更時必須新建對象對象,如String,已有“String str=‘abc’”,再次賦值“str=‘efg’”,此時新建一個String
    的頭像 發表于 09-19 11:44 ?2539次閱讀

    Linux發行版新秀:基于Ubuntu、系統核心 “不可變

    不可變的操作系統,系統的核心部分已被鎖定,以防止第三方應用程序進行不必要的更改和損壞,或引起錯誤更新。
    的頭像 發表于 01-11 15:35 ?1083次閱讀

    python的深入使用

    可變對象是指,一個對象在不改變其引用的前提下,可以修改其所指向的地址中的值* 不可變對象是指,一個對象
    的頭像 發表于 02-16 15:49 ?503次閱讀
    <b class='flag-5'>python</b>的深入使用

    python字符串序列操作和不可變

    初識python字符串序列操作和不可變性。python字符串序列操作為序列通用操作,python字符串不可變性是對字符串的操作不會改變原始字
    的頭像 發表于 02-23 15:01 ?832次閱讀

    Python字典組成的數組如何進行去重?

    因為使用set去重的前提是該對象不可變對象,而字典是可變對象,因此無法直接使用該方法去重。
    的頭像 發表于 02-24 13:58 ?847次閱讀
    <b class='flag-5'>Python</b>字典組成的數組如何進行去重?

    python中tuple的用法

    Python中的元組(tuple)是一種不可變的有序集合。與列表(list)類似,元組可以存儲任意類型的數據,但是元組一旦創建就不能被修改。在Python中,元組是使用圓括號進行表示,其中的元素可以
    的頭像 發表于 11-21 16:27 ?917次閱讀