天天看点

Python 的深浅拷贝 终于明白了

    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>&gt;&gt;&gt; </code><code>import</code> <code>copy</code>

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; a </code><code>=</code> <code>l1</code>

<code>&gt;&gt;&gt; b </code><code>=</code> <code>copy.copy(a) </code><code># 浅拷贝</code>

<code>&gt;&gt;&gt; c </code><code>=</code> <code>copy.deepcopy(a) </code><code># 深拷贝</code>

<code>&gt;&gt;&gt; l1.append(</code><code>7</code><code>)</code>

<code>&gt;&gt;&gt; l1[</code><code>3</code><code>].append(</code><code>'d'</code><code>)</code>

<code>&gt;&gt;&gt; </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>&gt;&gt;&gt; </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>&gt;&gt;&gt; </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>&gt;&gt;&gt; </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,如需转载请自行联系原作者