列舉:數值,字串、元組、位元組串
num = 123mystr = 'abc'
(id(num), num)
(id(mystr), mystr)
num = 456mystr = '
def'
print('
修改後...')
(id(num), num)
(id(mystr), mystr)
#結果:
140704113688128 123
1853358409744abc
修改...
1853359869712 456
1853361326544 def
表面上是對變數的修改,其實質是重新建立了物件,將引用賦給了變數,原來的物件被系統**。
列舉: 列表、字典、位元組陣列、物件
淺拷貝只拷貝可變型別的引用,在拷貝後的物件中對可變型別的修改會影響到原物件。
有幾種方式實現:
1. 完全切片操作
2. 利用系統函式list(), dict()
3. 利用copy模組的copy函式
ll = ['xiao
', ['
china
', 32]]
la =copy(ll)
lb =copy(ll)
(id(ll), ll)
(id(la), la)
(id(lb), lb)
print('
change...')
la[0] = '
zhang
'la[1][0] = '
usa'
la[1][1] = 40
(id(ll), ll)
(id(la), la)
(id(lb), lb)
#結果:
3006259174856 ['
xiao
', ['
china
', 32]]
3006259174536 ['
xiao
', ['
china
', 32]]
3006259174600 ['
xiao
', ['
china
', 32]]
change...
3006259174856 ['
xiao
', ['
usa', 40]]
3006259174536 ['
zhang
', ['
usa', 40]]
3006259174600 ['
xiao
', ['
usa', 40]]
對比淺拷貝,深拷貝利用copy模組的deepcopy()函式會完全拷貝出獨立的物件來。
ll = ['xiao
', ['
china
', 32]]
la =deepcopy(ll)
lb =deepcopy(ll)
(id(ll), ll)
(id(la), la)
(id(lb), lb)
print('
change...')
la[0] = '
zhang
'la[1][0] = '
usa'
la[1][1] = 40lb[0] = '
wang
'lb[1][0] = '
japan
'lb[1][1] = 49
(id(ll), ll)
(id(la), la)
(id(lb), lb)
#結果:
1957762145864 ['
xiao
', ['
china
', 32]]
1957762145544 ['
xiao
', ['
china
', 32]]
1957762145672 ['
xiao
', ['
china
', 32]]
change...
1957762145864 ['
xiao
', ['
china
', 32]]
1957762145544 ['
zhang
', ['
usa', 40]]
1957762145672 ['
wang
', ['
japan
', 49]]
元組中的列表不可以修改嗎?
tt = (12, 33, [44, 55, 66])(tt)#修改
tt[2][0] =0
(tt)
#結果:
(12, 33, [44, 55, 66])
(12, 33, [0, 55, 66])
## 元組中的元素tt[2]不可更改為其他內容,單列表中的元素可以隨意修改。
列表中的元組可以修改嗎?
dd = [1, 2, 3, 4, (7, 8, 9)](dd)
dd[4] =0
(dd)
#結果:
[1, 2, 3, 4, (7, 8, 9)]
[1, 2, 3, 4, 0]
## 列表中元組內容不可修改,但dd[4]的值可修改。
前端的深拷貝和淺拷貝 前端面試 深拷貝和淺拷貝
面試題目 如何實現對乙個陣列或物件的淺拷貝和深拷貝?wtf,複製還分兩種,第一次遇到這種問題的時候很是無語呢,先來看看一般的答案的理解。淺拷貝是只拷貝一層,深層次的物件級別就只拷貝引用。深拷貝是拷貝多層,每一級別的資料都拷貝出來。也就是說,基本資料型別其實不存在深淺拷貝的問題,只有物件和陣列才存在深...
轉 Python深複製淺複製or深拷貝淺拷貝
copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy a 1,2,3,4,a b c b a c copy.copy a d copy.deepcopy a 很容易理解 a是乙個...
python 深拷貝 Python深拷貝和淺拷貝!
在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用 一般有三種方法,alist 1,2,3,a b 1 直接賦值 b alist,預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變...