物件的三個要素id,型別,值。id 指的是記憶體位址,id 相同則兩個物件完全相同
= 賦值運算,a = b,指的是b 的id 與a 相同,b 的資料與a 指向相同的記憶體空間
is 判斷,返回true/false,a is b 判斷a 與 b 的id 是否相同
== 判斷,等號兩邊的值相等
練習1a = "123"
b = "123"
a is b >> true #a 、b 為字串、數字等不變的資料型別時,如果a b 相同則 ,a b 對應的是同乙個id。
c = [1,2,3]
d = [1,2,3]
c == d >> true #雙等號比較的是兩個物件的值是否相同,不考慮它們的型別和id
c is d >> false #當物件為列表、元祖、字典等型別資料時即使相同但也會存放在不同的記憶體空間,所以c d 的id 不一樣
e = d
d is e >> true #當不管d 為什麼資料型別,e=d 就是把e 的資料指標指向d 的記憶體空間,也是e 與d 使用相同的資料,相同的id
淺拷貝:資料半共享(複製其資料獨立記憶體存放,但是只拷貝成功第一層)
l1 = [1,2,3,[11,22,33]]如上述**,l2淺拷貝了l1 ,之後l2把其列表中的列表的元素給修改,從結果看出,l1也被修改了。但是僅僅修改l1列表中的第一層元素,卻並沒有影響l2。l2 =l1.copy()
print(l2) #
[1,2,3,[11,22,33]]
l2[3][2]='
aaa'
print(l1) #
[1, 2, 3, [11, 22, 'aaa']]
print(l2) #
[1, 2, 3, [11, 22, 'aaa']]
l1[0]=0
print(l1) #
[0, 2, 3, [11, 22, 'aaa']]
print(l2) #
[1, 2, 3, [11, 22, 'aaa']]
print(id(l1)==id(l2)) #
flase
深拷貝:資料完全不共享(複製其資料完完全全放獨立的乙個記憶體,完全拷貝,資料不共享)
importcopy
l1 = [1, 2, 3, [11, 22, 33]]
#l2 = copy.copy(l1) 淺拷貝
l2 =copy.deepcopy(l1)
print(l1,'
>>>
',l2)
l2[3][0] = 1111
print(l1,"
>>>
",l2)
Python賦值 深淺copy
在 python 中,物件的賦值就是簡單的物件引用,這點和 c 不同,如下所示 a 1,2,hello python c b a在上述情況下,a 和 b 是一樣的,他們指向同一片記憶體,b 不過是 a 的別名,是引用.我們可以使用 b is a 去判斷,返回 true,表明他們位址相同,內容相同,也...
python賦值與深淺拷貝
參考文章 在python中,物件的賦值就是簡單的物件引用,這點和c 不同。如下 a 1 2,3 hello python c b a for i in range len a print id a i id b i all true print a b true這種情況下,b和a是一樣的,他們指向同...
Python賦值與深淺拷貝
a 1,2,3 b a a 4,5,6 賦新的值給 a a 4,5,6 b 1,2,3 a 的值改變後,b 並沒有隨著 a 變 a 1,2,3 b a a 0 a 1 a 2 4,5,6 改變原來 list 中的元素 a 4,5,6 b 4,5,6 a 的值改變後,b 隨著 a 變了 上面兩段 中,...