# 二维数组中的查找

题目描述:简述 python 中深浅拷贝的区别。

# 练习

# 下面改变 b 的第一个元素后,a 的第一个元素也变化了,使用 id 查看两对象是一个
a = [1, 2, 3]
b = a
b[0] = 4
print(b, id(b))  # [4, 2, 3] 1722827161800
print(a, id(a))  # [4, 2, 3] 1722827161800
# 改变 b 的第一个元素后 a 不影响,id 查看是两个对象
import copy
a = [1, 2, 3]
b = copy.copy(a)
b[0] = 4
print(b, id(b))  # [4, 2, 3] 1722859718536
print(a, id(a))  # [1, 2, 3] 1722859718728
# 和上面 copy 模块的使用一样效果
a = [1, 2, 3]
b = a.copy()
b[0] = 4
print(b, id(b))  # [4, 2, 3] 1722859718728
print(a, id(a))  # [1, 2, 3] 1722827161800
# 虽然是两个对象,但是发现 a 的第一个元素不受影响,但是 a 的第三个元素,也就是字典里的元素收到了影响,所以这是个浅拷贝
import copy
a = [1, 2, {'name': 'Jalen'}]
b = copy.copy(a)
b[0] = 4
b[2]['name'] = 'Moe'
print(b, id(b))  # [4, 2, {'name': 'Moe'}] 1722827161800
print(a, id(a))  # [1, 2, {'name': 'Moe'}] 1722859718536
# 发现 a 对象字典里的元素也不受 b 的影响
import copy
a = [1, 2, {'name': 'Jalen'}]
b = copy.deepcopy(a)
b[0] = 4
b[2]['name'] = 'Moe'
print(b, id(b))  # [4, 2, {'name': 'Moe'}] 1722859718536
print(a, id(a))  # [1, 2, {'name': 'Jalen'}] 1722859718728
# 再深入修改数据元素,测试深拷贝,发现 a 完全不受影响
import copy
a = [1, 2, {'name': {'china': ['anhui', 'jiangsu', 'zhejiang']}}]
b = copy.deepcopy(a)
b[0] = 4
b[2]['name']['china'][0] = 'hubei'
print(b, id(b))  # [4, 2, {'name': {'china': ['hubei', 'jiangsu', 'zhejiang']}}] 1722859718728
print(a, id(a))  # [1, 2, {'name': {'china': ['anhui', 'jiangsu', 'zhejiang']}}] 1722858518408

# 答案

浅拷贝仅拷贝上层元素,如果拷贝后的对象有变化,则深层元素受影响;深拷贝完整复制,修改拷贝过后对象不会对原来对象带来任何影响。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Jalen Chu 微信支付

微信支付

Jalen Chu 支付宝

支付宝

Jalen Chu 公众号

公众号