python学习笔记(二):浅拷贝与深拷贝

python学习笔记(二):浅拷贝与深拷贝

  • 概括
  • 几个例子
    • 直接赋值
    • 浅拷贝
    • 深拷贝

概括

举例 类型 解释
b = a: 赋值引用 a 和 b 都指向同一个对象。
b = a.copy()或b=copy.copy(a) 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

几个例子

*id()返回对象的内存地址

直接赋值

代码:

a = [1,2,3]
b = a

print(id(a))
print(id(b))

b[0] = 514
print(a)

输出:

2361178739080
2361178739080
[514, 2, 3]

可以看到id(a)==id(b),说明直接赋值时两者指向同一对象

浅拷贝

代码:

import copy

a = [1,2,[3,4]]
b = copy.copy(a)

print(id(a))
print(id(b))
print(id(a[2]))
print(id(b[2]))

b[2][0] = 114
print(a)
print(b)

输出:

2318072588808
2318075078728
2318072853256
2318072853256
[1, 2, [114, 4]]
[1, 2, [114, 4]]

可以看到id(a)!=id(b),但id(a[2])==id(b[2]),说明浅拷贝时a 和 b 是不同对象,但他们的子对象还是指向同一对象。

深拷贝

代码:

import copy

a = [1,2,[3,4]]
b = copy.deepcopy(a)

print(id(a))
print(id(b))
print(id(a[2]))
print(id(b[2]))

b[2][0] = 114
print(a)
print(b)

输出:

2306280302984
2306282689416
2306280303112
2306282795144
[1, 2, [3, 4]]
[1, 2, [114, 4]]

可以看到id(a)!=id(b),且id(a[2])!=id(b[2]),说明深拷贝时a 和 b 是不同对象,他们的子对象也不是同一对象

你可能感兴趣的:(python学习,python)