python對象類型介紹(python對象類型比較)

本文目錄一覽:

Python對象的拷貝

Python賦值操作或函數參數傳遞,傳遞的永遠是對象引用(即內存地址),而不是對象內容。在Python中一切皆對象,對象又分為可變(mutable)和不可變(immutable)兩種類型。對象拷貝是指在內存中創建新的對象,產生新的內存地址。當頂層對象和它的子元素對象全都是immutable不可變對象時,不存在被拷貝,因為沒有產生新對象。淺拷貝(Shallow Copy),拷貝頂層對象,但不會拷貝內部的子元素對象。深拷貝(Deep Copy),遞歸拷貝頂層對象,以及它內部的子元素對象。

Python中一切皆對象,對象就像一個塑料盒子, 裡面裝的是數據。對象有不同類型,例如布爾型和整型,類型決定了可以對它進行的操作。現實生活中的”陶器”會暗含一些信息(例如它可能很重且易碎,注意不要掉到地上)。

對象的類型還決定了它裝着的數據是允許被修改的變量(可變的mutable)還是不可被修改的常量(不可變的immutable)。你可以把不可變對象想象成一個透明但封閉的盒子:你可以看到裡面裝的數據,但是無法改變它。類似地,可變對象就像一個開着口的盒子,你不僅可以看到裡面的數據,還可以拿出來修改它,但你無法改變這個盒子本身,即你無法改變對象的類型。

對象拷貝是指在內存中創建新的對象,產生新的內存地址。

淺拷貝(Shallow Copy),拷貝頂層對象,但不會拷貝內部的子元素對象。

2.1.1. 頂層是mutable,子元素全是immutable

當頂層對象是mutable可變對象,但是它的子元素對象全都是immutable不可變對象時,如[1, ‘world’, 2]

① 創建列表對象並賦值給變量a

② 導入copy模塊,使用copy.copy()函數淺拷貝a,並賦值給變量b

③ 修改變量a的子元素a[0] = 3,由於整數是不可變對象,所以並不是修改1變為3,而是更改a[0]指向對象3

當頂層對象是 mutable可變對象 ,但子元素也存在 mutable可變對象 時,如 [1, 2, [‘hello’,’world’]]

① 淺拷貝 copy.copy() 只拷貝了頂層對象,沒有拷貝子元素對象[‘hello’,’world’],即a[2]和b[2]指向同一個列表對象

② 修改a[2][1] = ‘china’,則b[2][1] = ‘china’

當頂層對象是immutable不可變對象,同時它的子元素對象也全都是immutable不可變對象時,如(1, 2, 3)

變量a與變量b指向的是同一個元組對象,沒有拷貝

當頂層對象是immutable不可變對象時,但子元素存在mutable可變對象時,如(1, 2, [‘hello’,’world’])

變量a與變量b指向的是相同的元組對象,並且a[2]與b[2]指向同一個列表,所以修改a[2][1]會影響b[2][1]

深拷貝(Deep Copy),遞歸拷貝頂層對象,以及它內部的子元素對象

當頂層對象是mutable可變對象,但是它的子元素對象全都是immutable不可變對象時,如[1, ‘world’, 2]

變量a與變量b指向不同的列表對象,修改a[0]只是將列表a的第一個元素重新指向新對象,不會影響b[0]

當頂層對象是mutable可變對象,但子元素也存在mutable可變對象時,如[1, 2, [‘hello’,’world’]]

深拷貝既拷貝了頂層對象,又遞歸拷貝了子元素對象,所以a[2]與b[2]指向了兩個不同的列表對象(但是列表對象的子元素初始指定的字符串對象一樣),修改a[2][1] = ‘china’後,它重新指向了新的字符串對象(內存地址為140531581905808),不會影響到b[2][1]

當頂層對象是immutable不可變對象,同時它的子元素對象也全都是immutable不可變對象時,如(1, 2, 3)

變量a與變量b指向的是同一個元組對象,不存在拷貝

當頂層對象是immutable不可變對象時,但子元素存在mutable可變對象時,如(1, 2, [‘hello’,’world’])

變量a與變量b指向的是不同的元組對象,同時a[2]與b[2]指向不同的列表對象,所以修改a[2][1]不會影響b[2][1]

使用=是賦值,即將列表對象的引用也賦值給變量b,可以將列表對象想像成一個盒子,變量a相當於這個盒子上的標籤,執行b = a後,相當於再在這個盒子上貼上b標籤,a和b實際上指向的是同一個對象。因此,無論我們是通過a還是通過b來修改列表的內容,其結果都會作用於雙方。

b/c/d都是a的複製,它們都指向了不同的列表對象,但是沒有拷貝子元素,a[2]和b[2]/c[2]/d[2]指向同一個列表, 相當於淺拷貝的效果

使用分片[:]操作,a和b其實是指向同一個元組,而且沒有拷貝子元素,a[2]和b[2]也指向同一個列表,相當於淺拷貝的效果

同列表類似,可以使用字典的copy()函數或者轉換函數dict()

變量a與變量b/c指向不同的字典,但是沒有拷貝子元素,a[‘jobs’]和b[‘jobs’]/c[‘jobs’]指定同一個列表, 相當於淺拷貝的效果

同列表類似,可以使用集合的copy()函數或者轉換函數set()

變量a與變量b/c指向不同的集合,而集合的元素必須是hashable,所以修改集合a不會影響到b/c

python語言的內置對象類型有哪些

python的內置對象

對象類型 常量示例/用法

Number(數字) 3.14159, 1234, 999L 3+4j

String(字符串) ‘spam’, “guido’s”

List(列表) [1,[2, ‘Three’],4]

Dictionary(字典) {‘food’:’spam’, ‘taste’:’yum’}

Tuple(元組) (1,’spam’,4,’U’)

File(文件) text=open(‘egges’,’r’).read()

python類的定義與使用是什麼

1、類概念的引入

如果了解了面向對象之後,接下來由客觀世界中的對象拓展到計算機中的對象,再對客觀世界中的對象進行特徵和行為的提取,從而拓展到計算機中對象的屬性和方法的提取,最終採用抽象提取計算機中對象的共同屬性和方法,形成類。

在客觀世界中,對象是指人們在行動或思考時作為目標的事物。例如,買車、買房、買包,這些都具有購買的目標,這些目標就是購買對象。萬事萬物皆是對象,對象分為有形對象和無形對象。有形對象是人們看得見、摸得着的對象。無形對象是人們看不見、摸不着的對象,但它也是人們行動或思考的目標,也屬於對象,如記憶、計劃等。

在計算機中,對象是客觀世界中的對象在計算機中的映射。例如,一條狗是客觀世界中的對象,它有品種、名字和年齡等數據信息。但是在計算機軟件開發研究的過程中,注重的是它的品種、年齡等信息。由此可見,客觀世界中的對象要映射到計算機中需要進行篩選。

計算機中對象的內涵包括以下三個方面:

①對象具有唯一性。每個對象都有自身唯一的標識,並且它的標識在其整個生命周期中都不會改變。不同的對象有不同的標識。

②對象是構成軟件系統的一個基本單位。面向對象編程是以對象為導向,以對象為目標的,也就是說,軟件系統是基於對象的。

③對象是屬性和方法的統一體。描述一個人,姓名、年齡是描述他的屬性數據,跳舞、唱歌是他的操作方法,屬性和方法構成了計算機中的對象。

由上文可知,客觀世界中的對象的特徵映射為計算機中的對象的屬性,行為映射為方法。

2、由抽象獲得類

抽象是一個提取各種對象共同特徵和行為的一個過程。例如,兩支筆,它們有共同的顏色、材質,它們都能寫字、畫畫,即有共同的特徵和行為。提取共同特徵和行為之後,就可以總結出筆的概念。拓展到計算機中的對象,就是用抽象提取對象的共同屬性和方法,從而形成類。

類是具有相同屬性和方法的一組對象的集合。在Python中,對象是類的實例,類是對象的抽象。

3、定義類

定義類的語法和定義函數的語法類似,定義函數使用的關鍵字是def,而定義類使用的關鍵字是class。定義類的基本語法格式如下:

class 類名:

pass

以定義一個最簡單的類為例,這裡定義了一個類名為Cat的類,它是“空”的,僅僅展示了定義類的基本語法:

 class Cat:

…     pass

以上就是Python中類的概念,更多關於Python的基礎性知識點可以看下這個更加直觀視頻教程:網頁鏈接,希望我的回答能幫到你。

python中的instance是什麼對象類型

面向對象最重要的概念就是類(Class)和實例(Instance),必須牢記類是抽象的模板,比如Student類,而實例是根據類創建出來的一個個具體的“對象”,每個對象都擁有相同的方法,但各自的數據可能不同。

仍以Student類為例,在Python中,定義類是通過class關鍵字:

class Student(object):

pass

class後面緊接着是類名,即Student,類名通常是大寫開頭的單詞,緊接着是(object),表示該類是從哪個類繼承下來的,繼承的概念我們後面再講,通常,如果沒有合適的繼承類,就使用object類,這是所有類最終都會繼承的類。

定義好了Student類,就可以根據Student類創建出Student的實例,創建實例是通過類名+()實現的:

bart = Student()

bart

__main__.Student object at 0x10a67a590

Student

class ‘__main__.Student’

可以看到,變量bart指向的就是一個Student的實例,後面的0x10a67a590是內存地址,每個object的地址都不一樣,而Student本身則是一個類。

可以自由地給一個實例變量綁定屬性,比如,給實例bart綁定一個name屬性:

bart.name = ‘Bart Simpson’

bart.name

‘Bart Simpson’

由於類可以起到模板的作用,因此,可以在創建實例的時候,把一些我們認為必須綁定的屬性強制填寫進去。通過定義一個特殊的__init__方法,在創建實例的時候,就把name,score等屬性綁上去:

class Student(object):

def __init__(self, name, score):

self.name = name

self.score = score

注意到__init__方法的第一個參數永遠是self,表示創建的實例本身,因此,在__init__方法內部,就可以把各種屬性綁定到self,因為self就指向創建的實例本身。

有了__init__方法,在創建實例的時候,就不能傳入空的參數了,必須傳入與__init__方法匹配的參數,但self不需要傳,Python解釋器自己會把實例變量傳進去:

bart = Student(‘Bart Simpson’, 59)

bart.name

‘Bart Simpson’

bart.score

59

和普通的函數相比,在類中定義的函數只有一點不同,就是第一個參數永遠是實例變量self,並且,調用時,不用傳遞該參數。除此之外,類的方法和普通函數沒有什麼區別,所以,你仍然可以用默認參數、可變參數、關鍵字參數和命名關鍵字參數。

python中類的實例對象的理解總結?

9.3.3. 實例對象

現在我們可以用實例對象作什麼?實例對象唯一可用的操作就是屬性引用。有兩種有效的屬性名。

數據屬性 相當於 Smalltalk 中的“實例變量”或 C++ 中的“數據成員”。和局部變量一樣,數據屬性不需要聲明,第一次使用時它們就會生成。例如,如果 x 是前面創建的 MyClass 實例,下面這段代碼會打印出 16 而在堆棧中留下多餘的東西:

x.counter = 1

while x.counter 10:

x.counter = x.counter * 2

print(x.counter)

del x.counter

另一種為實例對象所接受的引用屬性是 方法。方法是“屬於”一個對象的函數。(在 Python 中,方法不止是類實例所獨有:其它類型的對象也可有方法。例如,鏈表對象有 append,insert,remove,sort 等等方法。然而,在後面的介紹中,除非特別說明,我們提到的方法特指類方法)

實例對象的有效名稱依賴於它的類。按照定義,類中所有(用戶定義)的函數對象對應它的實例中的方法。所以在我們的例子中,x.f 是一個有效的方法引用,因為 MyClass.f 是一個函數。但 x.i 不是,因為 MyClass.i 不是函數。不過 x.f 和 MyClass.f 不同,它是一個 方法對象 ,不是一個函數對象。

原創文章,作者:BPA0U,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/128626.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
BPA0U的頭像BPA0U
上一篇 2024-10-03 23:25
下一篇 2024-10-03 23:25

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • int類型變量的細節與注意事項

    本文將從 int 類型變量的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變量進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變量。 一、定義與聲明 int…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論