python 深浅拷贝不之前一直不太理解,只是概念性的理解像 1,2 所说,敲完下面代码希望你可以理解。
1、copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝 拷贝对象及其子对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<code>>>> </code><code>import</code> <code>copy</code>
<code>>>> l1 </code><code>=</code> <code>[</code><code>1</code><code>,</code><code>3</code><code>,</code><code>5</code><code>,[</code><code>'a'</code><code>,</code><code>'b'</code><code>,</code><code>'c'</code><code>]]</code>
<code>>>> a </code><code>=</code> <code>l1</code>
<code>>>> b </code><code>=</code> <code>copy.copy(a) </code><code># 浅拷贝</code>
<code>>>> c </code><code>=</code> <code>copy.deepcopy(a) </code><code># 深拷贝</code>
<code>>>> l1.append(</code><code>7</code><code>)</code>
<code>>>> l1[</code><code>3</code><code>].append(</code><code>'d'</code><code>)</code>
<code>>>> </code><code>print</code> <code>'l1='</code><code>,l1</code>
<code>l1</code><code>=</code> <code>[</code><code>1</code><code>, </code><code>3</code><code>, </code><code>5</code><code>, [</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>], </code><code>7</code><code>]</code>
<code>>>> </code><code>print</code> <code>'a='</code><code>,a</code>
<code>a</code><code>=</code> <code>[</code><code>1</code><code>, </code><code>3</code><code>, </code><code>5</code><code>, [</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>], </code><code>7</code><code>]</code>
<code>>>> </code><code>print</code> <code>'b='</code><code>,b</code>
<code>b</code><code>=</code> <code>[</code><code>1</code><code>, </code><code>3</code><code>, </code><code>5</code><code>, [</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>]] </code>
<code>>>> </code><code>print</code> <code>'c='</code><code>,c</code>
<code>c</code><code>=</code> <code>[</code><code>1</code><code>, </code><code>3</code><code>, </code><code>5</code><code>, [</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>]] </code><code># 深拷贝数据没有变化</code>
备注:深浅拷贝的区别在于嵌套部分,浅拷贝和被拷贝对象的嵌套部分的元素是同一个,
一个改变其他的也会改变,列入上文实例 l1 = [1,3,5,['a','b','c']] ,嵌套部分是 ['a','b','c'], 这里的数据发生变化,浅拷贝也会发生变化。
本文转自 水滴石川1 51CTO博客,原文链接:http://blog.51cto.com/sdsca/1983766,如需转载请自行联系原作者