Python is和 的區別,深淺拷貝的區別

2021-10-01 06:47:26 字數 3049 閱讀 3318

id() 表示在記憶體中儲存的位置

type表示變數的型別

value表示變數的值

「is「 -----是表示兩個變數是否指向的是同一塊記憶體空間,即id,type,value都相等

「==「-----是表示兩個變數值是否相等 ,即type和value相等

即:如果「is「成立,則「==」,一定成立,反之,不一定。

>>

> li =

[1,2,3]

>>

> li

[1, 2, 3]

>>

> id(li)

139814583223368

>>

> li1 = li

>>

> id(li1)

139814583223368

>>

> li2 = li.copy(

)>>

> li2

[1, 2, 3]

>>

> id(li2)

139814459672456

>>

> li

[1, 2, 3]

>>

> li1

[1, 2, 3]

>>

> li2

[1, 2, 3]

>>

> li == li1

true

>>

> li1 == li2

true

>>

> li2 is li

false

>>

> li2 is li1

false

>>

> li1 is li

true

>>

>

淺拷貝:copy.copy()

深拷貝:copy.deepcopy()

淺拷貝:拷貝了內容,但是內部位址指向不發生變化

深拷貝:複製的內容,並且另外開闢一塊記憶體空間,連帶的內部位址指向也發生變化

如果copy.copy()拷貝的是元組(是不可變資料型別),那麼它不會進行淺拷貝

僅僅是指向,因為元組是不可變資料型別 那麼意味著資料一定不能修改 因此用copy.copy()的時候,它會自動判斷是指向

如果,用copy.copy() 和copy.deepcopy()對乙個全部是不可變資料型別的資料進行

資料拷貝,那麼它的結果是相同的 —都是引用

如果拷貝的是乙個擁有可變型別的資料,那麼deepcopy依然是深拷貝,而copy.copy()

還是指向,即淺拷貝

***面試常問:請簡述賦值, 深拷貝和淺拷貝的區別?(python中如何拷貝乙個物件?)

直接賦值(li1 = li): 只傳遞物件的引用, li1指向物件li的記憶體位址空間,

因此, 原有列表li改變, 被賦值的li1也會做相應的改變.

*** 當深拷貝和淺拷貝, 針對的物件全部是不可變資料型別時, 兩者效果相同;

*** 當深拷貝和淺拷貝, 針對的物件包含是可變資料型別時, 兩者才有上述區別;

>>

>

import copy

>>

> a =

[11,22]

>>

> b =

[33,44]

>>

> c =

[a,b]

>>

> c

[[11, 22], [33, 44]

]>>

> d = copy.copy(c)

>>

> d

[[11, 22], [33, 44]

]>>

> id(c)

139814459865608

>>

> id(d)

139814459865288

>>

> id(c[0]

)139814459768648

>>

> id(d[0]

)139814459768648

>>

> id(a)

139814459768648

>>

> e = copy.deepcopy(c)

>>

> id(e)

139814459027720

>>

> id(c)

139814459865608

>>

> id(c[1]

)139814459767560

>>

> id(b)

139814459767560

>>

> id(e[1]

)139814458868872

>>

> id(d[1]

)139814459767560

>>

> a =

[11,22]

>>

> b =

[33,44]

>>

> c =

(a,b)

>>

> c

([11, 22], [33, 44]

)>>

> d = copy.copy(c)

>>

> id(c)

139814458868808

>>

> id(d)

139814458868808

>>

> e = copy.deepcopy(c)

>>

> id(e)

139814459842504

>>

> id(c[1]

)139814458869064

>>

> id(e[1]

)139814459767560

>>

> id(d[1]

)139814458869064

>>

> id(a)

139814459866568

>>

> id(b)

139814458869064

python is和 的區別

在 python 中會用到物件之間比較,可以用 也可以用 is 但是它們的區別是什麼呢?is 比較的是兩個例項物件是不是完全相同,它們是不是同乙個物件,占用的記憶體位址是否相同。萊布尼茨說過 世界上沒有兩片完全相同的葉子 這個is正是這樣的比較,比較是不是同一片葉子 即比較的id是否相同,這id類似...

Python is 和 的區別

i1 205464113 i2 205464113 i3 i1 print id i1 print id i2 print id i3 print i1 is i2 print i1 i2 print i1 is i3 print i1 i3 print f1 1.574 f2 1.574 f3 f...

python is 和 的區別

python中的物件包含三百要素 id type value 其中id用來唯一標識乙個物件度,type標識物件的知型別,道value是物件的值內 is判斷的容是a物件是否就是b物件,是通過id來判斷的 判斷的是a物件的值是否和b物件的值相等,是通過value來判斷的 如下 或許可以幫助你理解。a 1...