問:深拷貝、淺拷貝、直接賦值的區別是什麼?並舉例說明
1.區別
(1)直接賦值:物件的引用
(2)淺拷貝(copy):拷貝父物件,不會拷貝物件的內部的子物件
定義說得有點抽象,簡而言之:
深拷貝和淺拷貝最根本的區別在於是否真正獲取乙個物件的複製實體,而不是引用。
假設b複製了a,修改a的時候,看b是否發生變化:
(1)如果b跟著也變了,說明是淺拷貝,
(2)如果b沒有改變,說明是深拷貝
2.舉例說明
#輸出結果:直接賦值
#定義列表
names = ["
test1
","test2
","test3
",["
kangkang
","mike
"],"
test4
","test5"]
#直接賦值
names1 = names #
無論 names中修改了什麼,names與names1保持完全一致
#修改原列表
names[1] = "
test6
"names[-3][0] = "
nice"#
列印結果
print("
names:
",names)
print("
names1:
",names1)
names: ['解析:直接賦值,names 和 names1 指向同乙個物件test1
', '
test6
', '
test3
', ['
nice
', '
mike
'], '
test4
', '
test5']
names1: [
'test1
', '
test6
', '
test3
', ['
nice
', '
mike
'], '
test4
', '
test5
']
#淺拷貝#
定義列表
names = ["
test1
","test2
","test3
",["
kangkang
","mike
"],"
test4
","test5"]
#淺拷貝列表
names1 =names.copy()
#修改原列表 names
names[1] = "
test6
"names[-3][0] = "
nice"#
列印print("
names:
",names)
print("
names1:
",names1)
names: ['解析:淺拷貝,拷貝父物件,不會拷貝物件的內部的子物件,他們的子物件 y 還是指向同乙個物件test1
', '
test6
', '
test3
', ['
nice
', '
mike
'], '
test4
', '
test5']
names1: [
'test1
', '
test2
', '
test3
', ['
nice
', '
mike
'], '
test4
', '
test5
']
深拷貝#
引入 copy 模組
import
copy
names = ["
test1
","test2
","test3
",["
kangkang
","mike
"],"
test4
","test5"]
names1 =copy.deepcopy(names)
#修改原列表
names[-3][0] = "
ken"
#列印結果
print("
names:
",names)
print("
names1:
",names3)
輸出結果:
names: ['解析:深拷貝,names 和 names1 完全拷貝了父物件及其子物件,兩者完全獨立test1
', '
test2
', '
test3
', ['
ken', '
mike
'], '
test4
', '
test5']
names1: [
'test1
', '
test2
', '
test3
', ['
kangkang
', '
mike
'], '
test4
', '
test5
']
Python 每日一問 37
問 基礎題 設計乙個複利計算函式invest 它包含三個引數 amount 資金 rate 年利率 time 投資時間 鍵盤輸入每個引數後,輸出結果 返回每一年的資金總額 比如,amount 10000 rate 8 time 5提高題 請實現乙個函式,將乙個字串中的每個空格替換成 20 答 基礎題...
Python 每日一問 32
問 基礎題 手機品牌存放在乙個列表中 brandlist 華為 蘋果 一加 oppo 小公尺 請實現以下功能 隨機選擇乙個手機品牌螢幕輸出 提高題 編寫乙個函式,輸入 n 為偶數時,呼叫函式求 1 2 1 4 1 n 當輸入 n 為奇數時,呼叫函式 1 1 1 3 1 n 答 基礎題 手機品牌存放在...
Python 每日一問 22
問 基礎題 輸出 9 9 口訣表 提高題 古典問題 有一對兔子,從出生後第 3 個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?ps 例如輸入乙個數字15,計算出第15個月兔子的總數 答 基礎題 輸出 9 9 口訣表 方法1 for i i...