您好,登錄后才能下訂單哦!
按照以下不同情況,在IDE中逐個解除注釋,就明白了
import copy
"""
第一種情況,不可變類型變量,都是引用
"""
# a = 1
# a = (11, 222, 333)
# a = 'string'
# a = True
# b = a
#
# print(id(a))
# print(id(b))
#
# c =copy.copy(a)
# d = copy.deepcopy(a)
# print(id(c))
# print(id(d))
"""
第二種情況,可變類型變量,淺拷貝和深拷貝都開辟了空間
備注:[(1,2),3]外層可變,內層不可變,同此類型。
"""
# a = [2, 3, 4]
# # a = {2,5,6}
# # a = {"name": "jim"}
# b = a
# c =copy.copy(a)
# d = copy.deepcopy(a)
#
# print(id(a))
# print(id(b))
# print(id(c))
# print(id(d))
#
# # ................
# a.append(5)
# # ----------------
#
# print(a)
# print(b)
# print(c)
# print(d)
"""
第三種情況,內外層都是不可變類型的,深淺拷貝都是引用
"""
# a = ((1,2),)
# b = a
# c =copy.copy(a)
# d = copy.deepcopy(a)
#
# print(id(a))
# print(id(b))
# print(id(c))
# print(id(d))
#
#
# print(a)
# print(b)
# print(c)
# print(d)
"""
第四種情況,外層不可變,內層可變,因為淺拷貝對不可變類型只是指向了,也即引用了內存地址,深拷貝重新開辟了內存地址。
"""
# e = 1
# f = 2
# list1 = [e, f]
# a = (list1,) # a= ([1,2],)
# b = a
#
# print(id(a))
# print(id(b))
#
# c =copy.copy(a)
# d = copy.deepcopy(a)
# print(id(c))
# print(id(d))
#
# list1.append(8)
#
# print(id(a))
# print(id(b))
# print(id(c))
# print(id(d))
# print(a)
# print(b)
# print(c)
# print(d)
"""
第五種情況,外層可變,內層可變----真正體現淺拷貝和深拷貝的差距,a[:]是一種淺拷貝。深淺拷貝都重新開辟了內存空間,淺拷貝的內層元素只是引用了內存地址,深拷貝的內層元素也重新開辟了內存空間。
"""
e = 1
f = 2
list1= [e,f]
g = 3
h = 4
list2 = [g,h]
a = [list1,list2]
b = a
c =copy.copy(a)
d = copy.deepcopy(a)
print(id(a))
print(id(b))
print(id(c))
print(id(d))
print(a)
print(b)
print(c)
print(d)
print("*" * 20)
# 改變e或者f的元素
list1.append('list1')
print(id(a))
print(id(b))
print(id(c))
print(id(d))
print(a)
print(b)
print(c)
print(d)
print("*" * 20)
a.append('a')
print(id(a))
print(id(b))
print(id(c))
print(id(d))
print(a)
print(b)
print(c)
print(d)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。