浅拷贝、深拷贝问题
import copy
a = [1,2,3,[4,5]]
b = a.copy()
c = copy.deepcopy(a)
d = a
e = a[:]
print("b -->", b)
print("c -->", c)
print("d -->", d)
print("e -->", e)
print("id(a) =",id(a), " id(b) =", id(b)," id(c) =", id(c)," id(d) =", id(d)," id(e) =", id(e))
print("b is a -->", b is a) # False
print("c is a -->", c is a) # False
print("d is a -->", d is a) # True
print("e is a -->", e is a) # False
a[0] = 7
a[3][0]=8
print("b -->", b) # [1, 2, 3, [8, 5]]
print("c -->", c) # [1, 2, 3, [4, 5]]
print("d -->", d) # [7, 2, 3, [8, 5]]
print("e -->", e) # [1, 2, 3, [8, 5]]
print("id(a) =",id(a), " id(b) =", id(b)," id(c) =", id(c)," id(d) =", id(d)," id(e) =", id(e))
print("b is a -->", b is a)
print("c is a -->", c is a)
print("d is a -->", d is a)
print("e is a -->", e is a)
运行结果
b --> [1, 2, 3, [4, 5]]
c --> [1, 2, 3, [4, 5]]
d --> [1, 2, 3, [4, 5]]
e --> [1, 2, 3, [4, 5]]
id(a) = 12846264 id(b) = 12846384 id(c) = 12893080 id(d) = 12846264 id(e) = 12893520
b is a --> False
c is a --> False
d is a --> True
e is a --> False
b --> [1, 2, 3, [8, 5]]
c --> [1, 2, 3, [4, 5]]
d --> [7, 2, 3, [8, 5]]
e --> [1, 2, 3, [8, 5]]
id(a) = 12846264 id(b) = 12846384 id(c) = 12893080 id(d) = 12846264 id(e) = 12893520
b is a --> False
c is a --> False
d is a --> True
e is a --> False
结论
b 浅拷贝,只变换二层及以上的内容
c 深拷贝,不变
d 复制,直接指向a,id 与 a 的 id 相同
e 浅拷贝,与b相同,id 不同