直接给例子
以下所有操作都是基于 a 这个list 来讲解的
>>> import copy
>>> a=[1,2,3,4,[5,6,7],(11,23),{1:2,3:4}]
直接“=”
这样传的**“引用”**,两者指向内存中同样的地址单元,修改一个,另一个会跟着做相同修改
>>> a
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> b=a
>>> b
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> a[0]=-1 #对a进行修改 b也会跟着变的
>>> a
[-1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> b
[-1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>>
copy.copy() 浅拷贝
只拷贝父对象,不会拷贝对象的内部的子对象。,理解看下面的例子,很好的理解的
例子1 修改父对象中的值
>>>
>>> a=[1,2,3,4,[5,6,7],(11,23),{1:2,3:4}]
>>> a
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> b=copy.copy(a)
>>> b
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> a[0]="修改第一个位置上的值" #位置0的是个数 不子对象 b不会改变 因为是“浅拷贝”
>>> a
['修改第一个位置上的值', 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> b
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
例子2 修改子对象中的值
>>> a=[1,2,3,4,[5,6,7],(11,23),{1:2,3:4}]
>>> a
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> b=copy.copy(a)
>>> b
>>> a[4][0]="修改内部对象list的值" #这里修改的是 内部子对象list的值 ,由于是“浅拷贝”,所以b 也会变
>>> a
['1', 2, 3, 4, ['修改内部对象list的值', 6, 7], (11, 23), {1: 2, 3: 4}]
>>> b
[1, 2, 3, 4, ['修改内部对象list的值', 6, 7], (11, 23), {1: 2, 3: 4}]
例子3 替换整个子对象list
>>> a=[1,2,3,4,[5,6,7],(11,23),{1:2,3:4}]
>>> a
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> b=copy.copy(a)
>>> b
>>> a[4]="替换整个对象"
>>> a
['1', 2, 3, 4, '替换整个对象', (11, 23), {1: 2, 3: 4}]
>>> b
[1, 2, 3, 4, ['5', 6, 7], (11, 23), {1: 2, 3: 4}]
例子4 修改子对象 字典
>>> a=[1,2,3,4,[5,6,7],(11,23),{1:2,3:4}]
>>> a
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> b=copy.copy(a)
>>> b
>>> a[-1][1]="修改内部词典的值"
>>> a
[1, 2, 3, 4, ['5', 6, 7], (11, 23), {1: '修改内部词典的值', 3: 4}]
>>> b
[1, 2, 3, 4, ['5', 6, 7], (11, 23), {1: '修改内部词典的值', 3: 4}]
copy.deepcopy() 深拷贝
** 拷贝对象及其子对象**,一旦使用“深拷贝”,两者是相互独立,没有任何联系,任何操作就只是针对
>>> a=[1,2,3,4,[5,6,7],(11,23),{1:2,3:4}]
>>> b=copy.deepcopy(a)
>>> a
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> b
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> a[4][0]=10000
>>> a
[1, 2, 3, 4, [10000, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> b
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]
>>> a[-1][1]=1000000
>>> a
[1, 2, 3, 4, [10000, 6, 7], (11, 23), {1: 1000000, 3: 4}]
>>> b
[1, 2, 3, 4, [5, 6, 7], (11, 23), {1: 2, 3: 4}]