Python 中什麼是可變和不可變?

已發表: 2022-09-22

在 Python 中,每個變量都包含兩種類型的任何對象的實例,即可變的和不可變的。 每當實例化一個對象時,都會為其分配一個唯一的對象 ID。 運行時定義對像類型,以後不能更改。

但是,可變對像是可變對象。 當我們說可變的時,它意味著內部對象狀態可以改變。 同時,創建後無法改變的對象狀態是不可變對象。 可變和不可變狀態都是 Python 數據結構的組成部分。

Python 中對象可變性的特性使其成為一種動態類型語言。 Python 中的 Mutable 和 Immutable 作為一個概念是非常重要的,但由於它們的不變性的不傳遞性而經常被混淆。

讓我們找出所有關於它們和主要區別的信息。

查看我們的數據科學在線課程,提升自己的技能

目錄

學習提陞技能的頂級數據科學技能

SL。 2022 年最值得學習的數據科學技能
1 數據分析在線課程 推論統計在線課程
2 假設檢驗在線課程 邏輯回歸在線課程
3 線性回歸課程 線性代數分析在線課程

Python中的可變狀態

“可變”一詞直接翻譯為“可變”或可以“變異”的東西。 它定義了一個對更改開放的對象,在 Python 中,“可變”與對象更改值的能力有關。 這些對象通常存儲數據集合併包含內置類型列表、集合、字典和用戶定義的類。

Python中的不可變定義狀態

Python 中的不可變是指您無法隨時間更改對像類型。 如果在 Python 中無法更改對象的值,則它被稱為不可變對象。 一旦創建了不可變對象,其值將保持永久不變。 不可變的內置類型對像是數字、字符串、元組、凍結集和用戶定義的類。

Python 中的對象

在深入研究 Python 中的可變性和不變性之前,讓我們首先了解什麼是對象。 在 Python 中,一切都被認為是一個對象,每個對像都具有三個屬性:

  • 身份:這是指對像在計算機內存中的地址。
  • 類型:這是指製作的對像類型。 例如,整數、字符串、列表等。
  • Value :這是指對象存儲的值。 例如,List=[5,6,7] 將存儲數字 5、6 和 7。

即使對象的 ID 和類型在創建後不開放更改,但值對可變對像開放更改。

Python中的可變對象

可變對像是 Python 中可以變異或更改的對象。 代碼更好地用於教授這些對象的實現。 因此,讓我們看一些代碼,並嘗試更好地理解可變對象:

  • 用於製作包含水果名稱的列表

水果= ['芒果','木瓜','橙子']

  • 用於打印水果列表中的元素,用逗號和空格分隔

水果中的水果:

打印(水果,結束=',')

輸出[1]:芒果、木瓜、橙子

  • 用於以十六進制格式打印在內存地址中創建的對象位置

探索我們流行的數據科學在線課程

IIITB 數據科學高級管理研究生課程 商業決策數據科學專業證書課程 亞利桑那大學數據科學理學碩士
IIITB 數據科學高級證書課程 馬里蘭大學數據科學和商業分析專業證書課程 數據科學在線課程

打印(十六進制(ID(水果)))

輸出[2]:0x1691d7de8c8

  • 將新水果添加到“水果”列表中

fruits.append('葡萄')

  • 用於打印列表“fruits”中存在的元素,以逗號和空格分隔

水果中的水果:

打印(水果,結束=',')

輸出 [3]:芒果、木瓜、橙子、葡萄

  • 用於以十六進制格式打印在內存地址中創建的對象位置

打印(十六進制(ID(水果)))

輸出[4]:0x1691d7de8c8

該示例顯示對象的內部狀態“fruits”可以通過向其添加一個水果“Grapes”來輕鬆更改。 但是,對象的內存地址保持不變,證明不需要創建新對象。 相反,同一個對象可以被改變或變異。 此示例顯示具有引用變量名稱“fruits”(列表類型)的對像是可變的。

Python 中的不可變對象

Python 中的不可變對像是其值不能更改的對象。 讓我們按照一個簡單的代碼來更好地掌握什麼是不可變對像以及它們是如何工作的。 代碼如下: -

  • 用於創建包含月份英文名稱的元組

月='一月','二月','三月','四月','五月','六月','七月','八月'

  • 用於打印元組月份的元素

打印(月)

輸出[1]:('一月','二月','三月','四月','五月','六月','七月','八月')

  • 用於打印對象位置,在內存地址中以十六進制格式創建

打印(十六進制(id(月)))

輸出[2]:0x1691cc35090

  • 重要的是要注意元組是不可變的。 因此,它們未能包含更多的新元素。 因此,您需要使用帶有# + 運算符的元組合併來在元組“月”中添加一個新的虛構月份。

月 += 'Pythonuary'

  • 用於打印元組“月”的元素。

打印(月)

輸出[3]:('一月','二月','三月','四月','五月','六月','七月','八月','Pythonuary')

  • 用於以十六進制格式打印在內存地址中創建的對象位置

打印(十六進制(id(月)))

輸出[4]:0x1691cc8ad68

閱讀我們熱門的數據科學文章

數據科學職業道路:綜合職業指南 數據科學職業發展:工作的未來就在這裡 為什麼數據科學很重要? 數據科學為企業帶來價值的 8 種方式
數據科學對管理者的相關性 每個數據科學家都應該擁有的終極數據科學備忘單 成為數據科學家的 6 大理由
數據科學家生活中的一天:他們做什麼? 神話破滅:數據科學不需要編碼 商業智能與數據科學:有什麼區別?

這個例子證明了變量名可以很容易地用於引用一個對象,一種由八個元素組成的元組。 但是,old & new tuple 的內存位置 ID 是不一樣的。 因此,無法更改對象的內部狀態“月”。 因此,Python 程序管理器在內存地址中創建了一個新對象。 此外,變量名“months”還引用了具有九個元素的新對象。 因此,證明元組,即引用變量名為“months”的對象,是一個不可變對象。

結論

可變對象主要用於允許任何未來的更新。 另一方面,不變性還為以網絡為中心的各種敏感任務提供了許多有效和實際的應用,從而實現了並行處理。 不可變對象,密封值並確保沒有線程調用數據的覆蓋/更新。 它非常適合編寫將來不需要更改的永久代碼。

如果你是一名初出茅廬的程序員或數據科學愛好者,學習 Python 中的可變和不可變對象將證明有助於你選擇這個領域作為你的職業。 了解這些的最好方法是在 upGrad 上註冊數據科學的行政研究生課程

該課程是在專家教師的指導下創建的,提供有關熱門話題的深入知識,為成千上萬的學習者為面向未來的職業做好準備。

Q1。 Python中可變與不可變之間的顯著區別是什麼?

答案:在可變對像中創建後對象的狀態或值可以修改 在不可變對像中創建後對象的狀態或值不可以修改 可變對像不是線程安全的。 不可變對像是完全線程安全的可變類不是最終的。 在創建不可變對象之前,您必須使類成為最終類。

Q2。 在 Python 中,什麼是可變數據類型和不可變數據類型?

答:Python 中的可變數據類型有列表、集合、字典和用戶定義的類,不可變數據類型有 int、decimal、float、bool、tuple、string 和 range。

Q3。 Python中的列表是可變的嗎?

答:在 Python 中,列表是具有易於修改的元素的可變數據類型。 此外,您可以替換單個元素,甚至在創建列表後更改元素的順序。