(8)基本對象類型--列表的定義、切片及深/淺復制(P1)

1. 基本對象類型(python里面一切皆是對象)

(接前文)

1.5 列表

1.5.1 列表的定義

列表由一系列按特定順序排列的元素組成。可以將任何東西加入列表中。

用方括號來表示列表,并用逗號來分隔其中的元素。列表的數據項(元素)可以為包括布爾型等各種類型,且同一個列表中的元素不需要具有相同的類型。

1.5.2 索引和切片

列表的索引和切片與字符串的完全一樣。具體參見字符串。

1.5.3 復制列表四種方式(包括淺拷貝/深拷貝)

復制列表有多種方式。請注意其區別。

1) 復制引用(數據只有一份)

示例:

>>> aList = ['Shanghai','Beijing','Guangzhou']

>>> id(aList)? #輸出存放數據的內存地址41803264

>>> bList = aList #將aList賦值給bList,本質上是將指向aList數據的引用復制一份

>>> bList? #輸出['Shanghai', 'Beijing', 'Guangzhou']

>>> id(bList) #存放數據的內存地址41803264,未變。

2) [:] 或 copy(淺拷貝)方法復制數據(但不復制數據中的復雜子數據類型【如列表、元組、字典等】)

>>> aList = ['Shanghai','Beijing','Guangzhou'] #不含復雜子數據類型

>>> id(aList)? #輸出存放數據的內存地址41803264

>>> bList = aList[:] 或cList = aList.copy()

>>> bList 輸出['Shanghai', 'Beijing', 'Guangzhou']

>>> id(bList) #地址50393216,已變。二份數據,修改其中一個list數據不會影響另外一個的數據。

>>> aList = ['Shanghai','Beijing','Guangzhou', [1,2,3]]

>>> id(aList)? #存放數據的內存地址50388608

>>> bList = aList[:] 或 bList = aList.copy()

>>> bList? #數據復制一份 ['Shanghai', 'Beijing', 'Guangzhou', [1, 2, 3]]

>>> id(bList)? #內存地址50114368改變

下面注意:

>>> id(aList[3])? #aList中的子列表[1,2,3]的內存地址50388864

>>> id(bList[3])? #aList中的子列表[1,2,3]的內存地址50388864,相同

重要說明:[:]或copy方法復制列表,列表中的簡單數據類型元素(如數值、字符串)會復制一份數據,若是復雜數據類型的元素(如列表、元組、字典等)則仍只是復制引用。這意味著修改列表中的簡單數據類型元素時不會影響對方,但修改復雜數據類型元素時會同時修改對方相應元素。

示例(繼續上例列表):

>>> bList.append('shenzheng')? #增加簡單數據類型元素,不會影響對方

>>> bList[3].append(4)? #修改復雜數據類型子元素,會影響對方

>>> bList? #輸出 ['Shanghai', 'Beijing', 'Guangzhou', [1, 2, 3, 4], 'shenzheng']

>>> aList #輸出['Shanghai', 'Beijing', 'Guangzhou', [1, 2, 3, 4]]

3) deepcopy(深拷貝),復制所有數據,包括復雜數據類型元素

說明:深拷貝需要import copy模塊

示例:

>>> import copy

>>> aList = ['Shanghai','Beijing','Guangzhou', [1,2,3]]

>>> bList = copy.deepcopy(aList)? #深拷貝

>>> bList? #輸出['Shanghai', 'Beijing', 'Guangzhou', [1, 2, 3]]

>>> id(aList)? ? #aList存放數據的內存地址41801280

>>> id(aList[3])? #aList的輸出50393216,復雜數據類型子元素[1,2,3]的內存地址

>>> id(bList)? ? #bList的內存地址 41803264, 不同

>>> id(bList[3])? #bList的復雜數據類型子元素[1,2,3]的內存地址41802432,不同

說明:深拷貝全部復制數據,包括復雜子元素。修改任何一個列表不會影響另外一個。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容