Direct Assignment: is actually the object's reference (alias).
shallow copy (copy): copies the parent object and does not copy the inner sub-object of the object.
deep Copy (deepcopy): The Deepcopy method of the Copy module, which completely copies the parent object and its child objects.
Example of a shallow copy of a dictionary
Instance
1234567 |
>>>a
=
{
1
: [
1
,
2
,
3
]}
>>> b
=
a.copy()
>>> a, b
({
1
: [
1
,
2
,
3
]}, {
1
: [
1
,
2
,
3
]})
>>> a[
1
].append(
4
)
>>> a, b
({
1
: [
1
,
2
,
3
,
4
]}, {
1
: [
1
,
2
,
3
,
4
]})
|
Deep copy requires the introduction of the Copy module:
Instance
1234567 |
>>>
import copy
>>> c
=
copy.deepcopy(a)
>>> a, c
({
1
: [
1
,
2
,
3
,
4
]}, {
1
: [
1
,
2
,
3
,
4
]})
>>> a[
1
].append(
5
)
>>> a, c
({
1
: [
1
,
2
,
3
,
4
,
5
]}, {
1
: [
1
,
2
,
3
,
4
]})
|
Analytical
1,B = A: assignment references, both A and B point to the same object.
2, B = a.copy (): shallow Copy, A and B are separate objects, but their child objects still point to a uniform object (which is a reference).
3, B = Copy.deepcopy (a): deep Copy, A and B completely copy the parent object and its child objects, both are completely independent.
More examples
The following examples are copy.copy (shallow copy) and (copy.deepcopy) using the Copy module:
Instance
1234567891011121314151617 |
#!/usr/bin/python
# -*-coding:utf-8 -*-
import
copy
a
=
[
1
,
2
,
3
,
4
, [
‘a‘
,
‘b‘
]]
#原始对象
b
= a
#赋值,传对象的引用
c
=
copy.copy(a)
#对象拷贝,浅拷贝
d
=
copy.deepcopy(a)
#对象拷贝,深拷贝
a.append(
5
)
#修改对象a
a[
4
].append(
‘c‘
)
#修改对象a中的[‘a‘, ‘b‘]数组对象
print
(
‘a = ‘
, a )
print
(
‘b = ‘
, b )
print
(
‘c = ‘
, c )
print
(
‘d = ‘
, d )
|
The output of the above instance execution is:
1234 |
(
‘a = ‘
, [
1
,
2
,
3
,
4
, [
‘a‘
,
‘b‘
,
‘c‘
],
5
])
(
‘b = ‘
, [
1
,
2
,
3
,
4
, [
‘a‘
,
‘b‘
,
‘c‘
],
5
])
(
‘c = ‘
, [
1
,
2
,
3
,
4
, [
‘a‘
,
‘b‘
,
‘c‘
]])
(
‘d = ‘
, [
1
,
2
,
3
,
4
, [
‘a‘
,
‘b‘
]])
|
Python direct assignment, shallow copy, and deep copy full resolution