列表的賦值 淺複製和物件複製引用區別

2021-10-09 21:23:25 字數 1243 閱讀 3281

一、物件的直接賦值

a =[1

,4,5

]b =

b = a

print

(a == b)

print(id

(a))

print(id

(b))

這種賦值是內容和位址的完全相同的,a和b在內容和記憶體位址上是等價的。修改任意乙個列表,a或者b,兩者同時改變。

true

1905039397384

1905039397384

二、 淺複製

方法1:切片返回列表的元素

a =[1

,4,5

]b =

b = a[:]

print

(a == b)

print(id

(a))

print(id

(b))

這種切片賦值方式是b對a的物件引用,兩者的位址不同,單內容相同,改變a或者b不會同時改變。

true

2327904342536

2327934061704

print

(a is b)

判斷物件是否一致

false
方法2:使用list

a =[1

,4,5

]b =

b =list

(a)print

(a == b)

print(id

(a))

print(id

(b))

print

(a is b)

true

1908907987464

1908908542472

false

和切片方法效果一致

方法三:copy函式

import copy

a =[1,

4,5]

b =[

]b = copy.copy(a)

print

(a == b)

print(id

(a))

print(id

(b))

print

(a is b)

js陣列賦值 引用 深複製 淺複製

如 var a 1,2,3,4 var b b a 這個不是把值賦值過去而是b作為a的引用,b改變的是a 如何b指向的是乙個新陣列,a把元素值全部賦值過去?1 普通陣列可以使用varb concat a 2 我遇到乙個jquery物件型別的陣列是 object array 型別,其拼接的陣列字串為 ...

php引用複製,淺複製clone和深複製

1.引用複製 class a a new a b a 引用賦值 a info 10 echo a info.echo b info.die 結果如下 2.淺複製clone class a a new a b clone a clone a info 10 echo a info.echo b inf...

物件複製與淺複製

a 15 echo a.輸出15 b a echo b.輸出15 b 25 echo b.輸出25 echo a.輸出15 可以發現,普通變數是值傳遞,在不同的記憶體空間,其中乙個改變對於另乙個沒有影響 class student public function setage age public ...