Python中引用複製 分片複製 完整複製

2021-07-03 00:13:20 字數 939 閱讀 8715

首先直接看例子:

>>> l1=[1,2,3]

>>> l11 = l1

>>> l2=[4,5,l1]

>>> l2

[4, 5, [1, 2, 3]]

>>> l3 = l2[:]

>>> l3

[4, 5, [1, 2, 3]]

>>>

import copy

>>> l4 = copy.deepcopy(l2)

>>> l4

[4, 5, [1, 2, 3]]

>>> l2[1] = 6

>>> l2

[4, 6, [1, 2, 3]]

>>> l3

[4, 5, [1, 2, 3]]

>>> l4

[4, 5, [1, 2, 3]]

>>> l1[0] = 7

>>> l1

[7, 2, 3]

>>> l11

[7, 2, 3]

>>> l2

[4, 6, [7, 2, 3]]

>>> l3

[4, 5, [7, 2, 3]]

>>> l4

[4, 5, [1, 2, 3]]

說明:

使用共享物件應用的方式來複製,只會給現存的物件新增乙個新的引用,並不會在記憶體中生成新的物件(看l11和l1的對比)。

使用分片的方法來複製列表等序列型別,只會複製當前序列的內容,不會複製序列內的資料結構(看l1、l2、l3的對比)。

字典擁有copy方法也可以進行複製,不過侷限性同2。

copy標準模板庫能夠生成完整的拷貝,消除上一條中不能複製序列內資料結構的問題(看l3和l4值的對比)。

2和3叫做頂層複製,無法複製巢狀的資料結構。

Python 中的引用與複製

python 中對於乙個物件的操作有引用與複製,但這兩種有乙個很大的區別就是引用物件的修改會影響被引用物件的內容,複製可以分為深複製與淺複製,淺複製的修改共享資料時也會影響被複製物件的內容。在程式中像a b,這樣的賦值時,就會建立乙個對b物件的新引用。對於數字和字串這樣的不可以變的物件,這種賦值實際...

python 引用與複製

a b 這樣的賦值,就會建立對b的引用,對於象數字和字串這樣的不可變的物件,這種賦值實際是建立了b的乙個副本 a hello b a id a id b b is a true a 1000 b hello 對於可變物件,比如字典和列表,a和b引用的是同乙個物件,修改其中任意乙個變數都會影響到另乙個...

python引用和複製

在程式進行像 a b 這樣的賦值時,就會建立乙個對b的新引用。對於像數字和字串這種的不可變物件。這種賦值實際上是建立了b的副本。然而,對於可變物件 如列表和字典 引用行為會完全不同 例項 對應的輸出已經在相應的行標註 usr bin python coding utf 8 a 1,2,3,4 b a...