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等)不需要开辟新的空间
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章