赋值运算,对于赋值运算来说,元素用的都是一个内存地址
s = ["1","2","3"]
b = s
s.append("4")
print(s,b)#打印['1', '2', '3', '4'] ['1', '2', '3', '4']
s = ["1","2","3",[11,22,33]]
b = s
s[-1].append("4")
print(s, b)#打印['1', '2', '3', [11, 22, 33, '4']] ['1', '2', '3', [11, 22, 33, '4']]
浅copy,第一层元素各自独立,第二层开始,公用一个内存地址
s = ["1","2","3"]
b = s.copy()
s.append("4")
print(s,b)#打印['1', '2', '3', '4'] ['1', '2', '3']
s = ["1","2","3",[11,22,33]]
b = s.copy()
s[-1].append("4")
print(s,b)#打印['1', '2', '3', [11, 22, 33, '4']] ['1', '2', '3', [11, 22, 33, '4']]
print(id(s),id(b))#打印2491607516992 2491607677824,两个不同的内存地址
print(id(s[-1]),id(b[-1]))#打印1488448126720 1488448126720,第二层元素开始内存地址相同
深copy,引用copy模块,每层的元素都是独立的
import copy
s = ["1","2","3",[11,22,33]]
b = copy.deepcopy(s)
s[-1].append("4")
print(s,b)#打印['1', '2', '3', [11, 22, 33, '4']] ['1', '2', '3', [11, 22, 33]]
切片来说,都是浅copy
s = ["1","2","3",[11,22,33]]
b = s[:]
s[-1].append("4")
print(s,b)#打印['1', '2', '3', [11, 22, 33, '4']] ['1', '2', '3', [11, 22, 33, '4']]