目录
1. 基本概念
浅拷贝:只拷贝对象的地址,不拷贝对象的内容;深拷贝:将内容也拷贝,对子对象修改不会影响原对象 。
python中浅拷贝函数:copy();深拷贝函数:deepcopy()
2. 代码演示及分析
2.1 浅拷贝
"""测试浅拷贝"""
def test_copy():
a = [10, 20, [5, 6]]
b = copy.copy(a)
print(".....原数据......")
print("a", a)
print("b", b)
b.append(30)
b[2].append(7)
print("......浅拷贝......")
print("a", a)
print("b", b)
.....原数据......
a [10, 20, [5, 6]]
b [10, 20, [5, 6]]
.....浅拷贝......
a [10, 20, [5, 6, 7]]
b [10, 20, [5, 6, 7], 30]
为了深刻理解“浅拷贝只拷贝对象,不拷贝对象的内容。”,对上述代码进行了图示:
2.1.1 浅拷贝内存示意图
从图中可知,浅拷贝完成后a、b变量有了各自的对象,但对象指向的内容是共享的。由于b[2]对象的内容是a和b共享的,因此对b[2]做修改,a也会发生变化。由于b对象已经对从a中独立,则b.append(30)只会作用在b上,不会影响a。
2.2 深拷贝
"""测试深拷贝"""
def test_deepcopy():
a = [10, 20, [5, 6]]
b = copy.deepcopy(a)
print(".....原数据......")
print("a", a)
print("b", b)
b.append(30)
b[2].append(7)
print(".....深拷贝......")
print("a", a)
print("b", b)
.....原数据......
a [10, 20, [5, 6]]
b [10, 20, [5, 6]]
.....深拷贝......
a [10, 20, [5, 6]]
b [10, 20, [5, 6, 7], 30]
为了深刻理解“将内容也拷贝,对子对象修改不会影响原对象 。”,对上述代码进行了图示:
2.2.1 深拷贝内存示意图
个人总结,不对之处欢迎指出