zoukankan      html  css  js  c++  java
  • python 学习之自动化编程——DAY3-copy and deepcopy

    今天和page老师学习深浅copy原理和应用,有点不是很理解,又去网上查了下相应的文章,自己总结一下如下:

    针对int和str类的赋值即引用,不区分深浅copy,内存地址指向同一地址。

    针对除字符串和数字以外的对象,copy 和deepcopy是不一样的。copy只copy第一层,不copy对象的属性,改变对象的属性,copy的属性一样会变化。

    例如:

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @File  : copy.copy.py
     4 # @Author: Frank
     5 # @Date  : 2018-04-16
     6 import copy
     7 dic={1:1,2:2,3:[1,2,3],
     8 
     9 }
    10 print('before',dic)
    11 new_dic=copy.copy(dic)
    12 dic[3][0]=50
    13 print(dic)
    14 print(new_dic)

    输出结果:

    before {1: 1, 2: 2, 3: [1, 2, 3]}
    {1: 1, 2: 2, 3: [50, 2, 3]}
    {1: 1, 2: 2, 3: [50, 2, 3]}

    在第一个字典结构不变,只改变内容的情况下,第二个字典的内容随之变化,相当于两个字典指向同一个对象属性。

    而如果第一/二个字典结构改变,如下:则两个字典不再指向同一个地址,则相当于改变了对象的结构。但其他部分还是指向同一个对象。

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @File  : copy.copy.py
     4 # @Author: Frank
     5 # @Date  : 2018-04-16
     6 import copy
     7 
     8 dic={1:1,2:2,3:[1,2,3],}
     9 #定义一个字典
    10 print('before',dic)
    11 #打印字典
    12 new_dic=copy.copy(dic)
    13 #新字典copy旧字典
    14 new_dic[1]=50
    15 #改变新字典的第一个key对应的value
    16 new_dic[3][0]=50
    17 #改变新字典第三个key对应的value内容
    18 print(dic)
    19 #打印旧字典
    20 print(new_dic)
    21 #打印新字典

    输出如下:

    before {1: 1, 2: 2, 3: [1, 2, 3]}
    #旧字典
    {1: 1, 2: 2, 3: [50, 2, 3]}
    #旧字典key1,key2不变,key3由于指向相同的【list]】,所以跟着new—dic改变。(指向同一对象)
    {1: 50, 2: 2, 3: [50, 2, 3]}
    #打印new—dic

    以上,粗浅理解,请多海涵。

    另外,CSDN上看到一篇文章,转载如下:

    https://blog.csdn.net/u012046327/article/details/11473143

  • 相关阅读:
    redis远程连接超时
    GNU LIBC源代码学习之strcmp
    计算最小生成树
    域名和空间的绑定问题
    Spring MVC 基于Method的映射规则(注解版)
    Spring MVC 基于URL的映射规则(注解版)
    手把手教你编写Logstash插件
    Ruby中如何识别13位的时间戳
    [logstash-input-http] 插件使用详解
    Java直接(堆外)内存使用详解
  • 原文地址:https://www.cnblogs.com/frank1126lin/p/8853967.html
Copyright © 2011-2022 走看看