美文网首页
python学习笔记23_深浅拷贝

python学习笔记23_深浅拷贝

作者: flamingocc | 来源:发表于2018-03-15 23:08 被阅读0次

    python 笔记23

    .copy( ) 与 浅拷贝

    s = [1,'Flamingo','Flamingo']
    s2 = s.copy()
    print s2
    
    
    输出: [1,'Flamingo','Flamingo']
    

    提问:如果现在修改s2的值,那么s的值会不会改变呢?

    s = [1,'Flamingo','Flamingo']
    s2 = s.copy()
    s2[0] = 2
    print(s)
    print(s2)
    
    输出:
    [1, 'Flamingo', 'Flamingo']
    [2, 'Flamingo', 'Flamingo']
    

    这样是否能证明修改拷贝了的数据并不会影响原来的数据呢?
    看下面一个例子:

    s = [[1,2],'Flamingo','Flamingo']
    s2 = s.copy()
    s2[0][1] = 3
    print(s2)
    print(s)
    
    输出:
    [[1, 3], 'Flamingo', 'Flamingo']
    [[1, 3], 'Flamingo', 'Flamingo']
    

    显然,随着s2的修改,s的值也发生了改变。
    那么s和s2之间到底存在什么样的关系呢?怎么解释这种关系?

    这种关系称为"浅拷贝"。

    这里列表a有4个值:a = [[1,2],3,4],其中1和2被放在了另一个列表中。
    b有3个值:b = [1,3,4],1被放在了另一个列表中。
    下面修改列表b的第一个值为8,b = [8,3,4],那么存储1和2的列表就发生了改变,从[1,2]变成了[8,2],而a[0]此时就是新的列表[8,2]了,a列表此时为:a = [[8,2],3,4]。
    这就是"浅拷贝",只拷贝第一层数据,所以修改整型和字符串没有影响,但修改列表则有影响。当然对于可变的字典也是同样的原理。

    对于整型和字符串则不会改变

    a = 1
    b = a
    a = 2
    print(a)
    print(b)
    
    输出:
        a = 2
        b = 1
    

    这里输出a和b的值不一样,区别于列表。

    看下面两个例子理解copy()的原理:




    copy浅拷贝内存解释:

    提问:如果现在把a删了,那么b还存在吗?
    回答:当然不会,删除a只是删除a这个变量名,而存在内存中的数据还存在,故b还是存在的。

    浅copy的作用是什么呢?

    举个栗子:

    一位男性在银行开了一张信用卡,额度150000,剩余额度90000.
    如果男性要给妻子开同一张信用卡的副卡呢?那么就能能通过浅拷贝来实现。

    husband = ["Flam",123,[150000,90000]]
    wife = husband.copy()
    wife[0] = "Mingo" 
    wife[1] = 456
    

    深拷贝 copy.deepcopy( )

    如果我们要复制一份完全一样,而且不受其他变量影响的数据呢?
    这个时候就需要深拷贝了。
    需要引入一个copy模块。

    例子:


    相关文章

      网友评论

          本文标题:python学习笔记23_深浅拷贝

          本文链接:https://www.haomeiwen.com/subject/ajbkqftx.html