目錄
1.直接等號賦值
a is b, a[i] is b[i]
a=[1,2,3];
c=a;
c[0]=10;
print(a);
print(c);
==================
[10, 2, 3]
[10, 2, 3]
被賦值對象認爲是原對象的引用,兩個變量指向同一個對象,其中一個變量發生變化,另一個變量也隨之變化。兩個變量的id是相同的。
2.copy.copy
a is not b, a[i] is b[i]
淺複製,兩個變量共享子對象
淺複製:兩個變量的地址即id不同,但兩個變量的元素還是共享同一個地址id
這個地方還是沒搞明白,爲什麼id相同,還會a變b不變呢?
import copy
f=['a','b','c',['d','e']];
g=copy.copy(f);
print(g)
print(f)
print(id(g))
print(id(f))
print(id(g[1]))
print(id(f[1]))
print(id(g[3]))
print(id(f[3]))
=============================
['a', 'b', 'c', ['d', 'e']]
['a', 'b', 'c', ['d', 'e']]
2442999778312
2442999776712
#變量id不同
2442851121896
2442851121896
2442999778440
2442999778440
#變量子元素id相同
=============================
g[0]=10;
print(g)
print(f)
=============================
[10, 'b', 'c', ['d', 'e']]
['a', 'b', 'c', ['d', 'e']]
=============================
g[3].append('f')
print(g)
print(f)
=============================
[10, 'b', 'c', ['d', 'e', 'f']]
['a', 'b', 'c', ['d', 'e', 'f']]
==============================
g[3]='f'
print(g)
print(f)
==============================
[10, 'b', 'c', 'f']
['a', 'b', 'c', ['d', 'e', 'f']]
3.copy.deepcopy()
a is not b, a[i] is not b[i]
深複製,此時兩個變量爲獨立的對象,互不影響
f=['a','b','c',['d','e']];
g=copy.deepcopy(f);
g[0]=10;
print(g)
print(f)
g[3].append('f')
print(g)
print(f)
=============================
[10, 'b', 'c', ['d', 'e']]
['a', 'b', 'c', ['d', 'e']]
[10, 'b', 'c', ['d', 'e', 'f']]
['a', 'b', 'c', ['d', 'e']]
4.元組的複製
列表是可修改的,而元組就是不可修改的列表,不能給元組的元素進行賦值。元組id不變。
import copy
a_tuple=(1,2);
b=copy.copy(a_tuple);
c=copy.deepcopy(a_tuple);
print(b==c)
print(id(b)==id(c));
testlist=[3,4];
cc=copy.copy(testlist);
dd=copy.deepcopy(testlist)
print(cc==dd)
print(id(cc)==id(dd))
=================================
True
True
True
False
5.使用切片、for循環遍歷賦值方法
淺複製,同copy.copy相同,只對第一層即第一個維度進行深複製
a=['a','b','c',['d','e']];
b=a[:]
print(id(a))
print(id(b))
b[3].append('f')
print(a)
print(b)
=============================
2443000001544
2442999783752
['a', 'b', 'c', ['d', 'e', 'f']]
['a', 'b', 'c', ['d', 'e', 'f']]
a=['a','b','c',['d','e']];
b=[]
for i in a:
b.append(i)
print(id(a))
print(id(b))
b[3].append('f')
print(a)
print(b)
===============================
2443000004488
2443000003976
['a', 'b', 'c', ['d', 'e', 'f']]
['a', 'b', 'c', ['d', 'e', 'f']]
參考:https://www.cnblogs.com/xueli/p/4952063.html