Python基礎 day6 深淺拷貝

2021-10-07 12:36:24 字數 3639 閱讀 3963

列表的copy方法:

s = [1,'yuyang','dba']

s1 = s.copy()

print(s1)

s1[0] = 2

print(s)

print(s1)

結果:

[1, 'yuyang', 'dba']

[1, 'yuyang', 'dba']

[2, 'yuyang', 'dba']

process finished with exit code 0

淺拷貝的兩種方式:

s = [[1,2],'yuyang','dba']

s1 = s.copy()

或者s1 = s[:]

s = [[1,2],'yuyang','dba']

s1 = s.copy()

print(s)

print(s1)

s1[0][1] = 3

print(s1)

print(s)

執行結果:

[[1, 2], 'yuyang', 'dba']

[[1, 2], 'yuyang', 'dba']

[[1, 3], 'yuyang', 'dba']

[[1, 3], 'yuyang', 'dba']

process finished with exit code 0

從上面的程式執行結果中,可以看到,在修改s1(拷貝)列表中的列表的某乙個元素的時候,修改後,s和s1都被修改了。這種情況就說明,s和s1是有關聯的。

s1 = s                        #兩個變數完全相等

s1[1] = 'zhangsan'            #修改s1的乙個元素

print(s)

print(s1)                     #從列印結果中來看,是兩個都被修改了的

s2 = s[:]                     #s2淺拷貝s

s2[2] = 'pm'                 #修改s2中乙個元素

print(s)

print(s1)

print(s2)                     #從列印結果中看,原來兩個變數(列表沒有被修改,只有淺拷貝的s2自己修改了,這裡就體現出做淺拷貝和=的區分)

執行結果:

[[1, 2], 'zhangsan', 'dba']

[[1, 2], 'zhangsan', 'dba']

[[1, 2], 'zhangsan', 'dba']

[[1, 2], 'zhangsan', 'dba']

[[1, 2], 'zhangsan', 'pm']

process finished with exit code 0

ctrl + /
示例:

print('step1'.center(30,'-'))

a = 1

b = a

print(a)

print(b)

print('---')

print(id(a))

print(id(b))

print('step2'.center(30,'-'))

b = 2

print(a)

print(b)

print('---')

print(id(a))

print(id(b))

print('step3'.center(30,'-'))

a = [1,2]

b = a

print(a)

print(b)

print('---')

print(id(a))

print(id(b))

print('step4'.center(30,'-'))

b[1] = 3

print(a)

print(b)

print('---')

print(id(a))

print(id(b))

執行結果:

------------step1-------------11

---1767416928

1767416928

------------step2-------------12

---1767416928

1767416960

------------step3-------------

[1, 2]

[1, 2]

---1365916817416

1365916817416

------------step4-------------

[1, 3]

[1, 3]

---1365916817416

1365916817416

process finished with exit code 0

import copy

s = [[1,2],'yuyang','dba']

s1 = copy.deepcopy(s)

print(s1)

結果:

[[1, 2], 'yuyang', 'dba']

process finished with exit code 0

示例:

import copy

s = [[1,2],'yuyang','dba']

print(s)

s1 = copy.deepcopy(s)         #深拷貝

s2 = s.copy()                 #淺拷貝

#s2 = copy.copy(s)            #也是淺拷貝和上一行的執行結果一致

s1[0][1] = 3

s2[0][1] = 4

print(s)

print(s1)

print(s2)

執行結果:

[[1, 2], 'yuyang', 'dba']

[[1, 4], 'yuyang', 'dba']

[[1, 3], 'yuyang', 'dba']

[[1, 4], 'yuyang', 'dba']

process finished with exit code 0

python基礎day6 列表

1.1基本概念 1.2序列的分類 2.1列表的使用 2.2切片 步長表示選擇列表資料時兩個資料之間的間隔,預設是一可以不寫 步長不能是0但是可以是負數 in 和 not in in 用來檢查元素是否在列表中 not in 是用來檢測列表是否不在列表中 len 獲取列表中元素的個數 max 獲取列表中...

Shell基礎 day6 陣列

1,shell中的陣列分為普通陣列和關聯陣列 注意普通陣列的下標是數字,而關聯陣列的下標可以是字串。注意普通陣列對應python中的列表,關聯陣列對應python中的字典。如果想輸出普通陣列中的值 linux 可以直接執行命令echo 但是shell預設不支援關聯陣列,所以不能直接用命令echo 來...

Python學習日記day6

字串型別及操作 知識點1 使用 m n k 根據步長對字串切片 m缺失表示至開頭,n缺失表示至結尾。k為步長,擷取的字串位置為m到n 1 知識點2 轉義符號 轉義符號後的字元為原始字元 知識點3 字串操作符 x y 連線兩個字串x和y n x 或 x n 複製n次字串x x in s 如果x是s的子...