Python——深拷貝與淺拷貝

s1 = '你好'
s2 = s1
    

print(id(s1))
print(id(s2))

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2118051305672
2118051305672

變量之間賦值相當於C++引用

 

a = ['c1', 'c2']
for b in a:
    print(id(b))
    b = 'bian'
print('a[0]', id(a[0]))
print('a[1]', id(a[1]))
print(a)

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

2532258695856
2532258696248
a[0] 2532258695856
a[1] 2532258696248
['c1', 'c2']

遍歷對象時,b指向的是a中的元素而不是複製出來的新對象。這裏b仍然相當於C++中的引用

但是此處無法通過修改b的值來改變a的內容,爲啥呢?因爲裏面存的是常量啊。。。。。

 

c1 = [1]
c2 = ["feng"]
a = [c1, c2]
for b in a:
    print(id(b))
    b.append(1)
print('a[0]', id(a[0]))
print('a[1]', id(a[1]))


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2400425028040
2400425027848
a[0] 2400425028040
a[1] 2400425027848
[[1, 1], ['feng', 1]]

當a中的元素爲變量時就可以修改了

 

總結:

  1. 賦值是將一個對象的地址賦值給一個變量,讓變量指向該地址( 舊瓶裝舊酒 )。
  2. 修改不可變對象(str、tuple)需要開闢新的空間
  3. 修改可變對象(list等)不需要開闢新的空間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章