1. 赋值

  赋值:指向同一块内存地址,所以同时改变

l1 = [1,2,3]
l2 = l1
l1.append('a')
print(l1,l2) # [1, 2, 3, 'a'] [1, 2, 3, 'a']

2.copy

  (1)浅copy--copy

    对于浅copy来说,第一层创建的是新的内存地址。
    而从第二层开始,指向的是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
    第一层都是独立的,改一个不会影响另一个----整体的(最外层)内存地址不一致。
    从第二层开始是公用的,改一个都会变----嵌套的(内层)内存地址一样。

#(1)一层——各自独立
l1 = [1,2,3]
l2 = l1.copy()
print(l1,l2) #[1,2,3] [1,2,3]
print(id(l1),id(l2)) #2727834966216 2727834105928
l2.append('a')
print(l1,l2) #[1,2,3] [1,2,3,'a']
''''''
#(2)两层——外层各自独立,内层同时改变
l1 = [1,2,[4,5,6],3]
l2 = l1.copy()
print(l1,id(l1)) #[1,2,[4,5,6],3] 1906050021448
print(l2,id(l2)) #[1,2,[4,5,6],3] 1906079848520
l1.append('a')
print(l1,l2) #[1,2,[4,5,6],3,'a'] [1,2,[4,5,6],3]
l1[2].append('a')
print(l1,l2) #[1,2,[4,5,6,'a'],3,'a'] [1,2,[4,5,6,'a'],3]
# 为什么l2中有'a'?
# 浅copy只有外层独立,内层时同时改变的

  (2)深copy--deepcopy

    复制前后是完全独立的,改变任意一个的元素(无论是多少层),另一个绝不会改变。

import copy
#(2)深copy:复制前后是完全独立的,改变任意一个的元素(无论是多少层),另一个绝不会改变。
l1 = [1,2,[4,5,6],3]
l2 = copy.deepcopy(l1)
print(l1,id(l1)) #[1,2,[4,5,6],3] 2656767367304
print(l2,id(l2)) #[1,2,[4,5,6],3] 2656767368136
l1[2].append('a')
print(l1,l2) #[1,2,[4,5,6,'a'],3] [1,2,[4,5,6],3]

Python——深浅Copy的更多相关文章

  1. python深浅copy探究

    引入 在python程序中,如果我们操作一个变量的值去做运算,而又想在下次调用时,仍使用原来的变量的值去做运算,那么我们我们就需要将这个变量去做备份,这就是本文所要探究的问题. 开始 变量-对象-引用 ...

  2. Python 深浅copy 和文件操作

    深浅copy 1,先看赋值运算. l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['barry', ...

  3. python深浅copy

    预备知识一——python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,了解一下python内存中变量的存储情况. 在高级语言中,变量是对内存及其地址的抽象.对于py ...

  4. python深浅copy和赋值

    Python直接赋值,浅copy和深copy的比较 基于引用和对象(python引用和对象分离) 总结: 直接赋值:a = b -->a,b两个引用指向相同的对象 浅copy:a为b的copy ...

  5. python 深浅copy的例子

    1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepcopy 深拷贝 拷贝对象及其子对象一个很好的例子:import copya = [1, 2, 3, ...

  6. python 深浅copy总结

    总结: ''' 总结:假设l1为原数据,l2为deepcopy后的数据: 1.浅copy,只能改变第一层的内存地址(不可变数据类型除外). 2.深copy,能够改变第一层和第二层的内存地址(不可变数据 ...

  7. 番外:深浅copy

    进击のpython 深浅copy copy是什么意思? 复制 (又学一个单词!开不开森) 那啥叫复制呢? 百度百科上给的解释是:仿原样品制造 我们曾经有过这样的印象 a = "zhangsa ...

  8. python基础3(元祖、字典、深浅copy、集合、文件处理)

    本次内容: 元祖 字典 浅copy和深copy 集合 文件处理 1.1元祖 元祖(tuple)与列表类似,不同之处在于元祖的元素不能修改,元祖使用小括号(),列表使用方括号[].元祖创建很简单,只需要 ...

  9. python学习笔记三 深浅copy,扩展数据类型(基础篇)

    深浅copy以及赋值 对于字符串和数字而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy n1 = #n1 = 'hahahaha' #赋值n2 = n1#浅co ...

随机推荐

  1. ansible modules开发(二)

    四 使用其他语言发开module cd /etc/ansible cat library/touch.sh #!/bin/sh args_file=$1 [ ! -f "$args_file ...

  2. log4j 日志详解

    # 以下是rootLogger的配置,子类默认继承,但是子类重写下面配置=rootLogger+自己配置,我晕#输出到控制台 log4j.appender.console=org.apache.log ...

  3. C++:override和final

    1. override 重载 当你在父类中使用了虚函数时候,你可能需要在某个子类中对这个虚函数进行重写,以下方法都可以: class A { virtual void foo(); } class B ...

  4. Quartz 框架 教程(中文版)2.2.x

    Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架 Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介 Quar ...

  5. CSS技巧和经验

    如何清除图片下方出现几像素的空白间隙 方法1 img { display: block; } 方法2 除了top值,还可以设置为text-top | middle | bottom | text-bo ...

  6. C# 常用时间戳处理方法

    C# 常用时间戳处理方法 /// <summary> /// 时间戳转为C#格式时间 /// </summary> /// <param name="timeS ...

  7. bzoj1997

    题解: 在圆上面的点能不能不交叉 和那一题差不多 http://www.cnblogs.com/xuanyiming/p/8110597.html 代码: #include<bits/stdc+ ...

  8. droppable放置组件

    Droppable 放置组件 所谓放置,就将一个事物入一个事物内触发各种效果,这个组件不依赖于其他组件.1.加载方式 //class 调用 <div id="dd" clas ...

  9. Memcached 补充

    Memcached 补充 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站 ...

  10. IOS开发 基础框架(Fondation Framework)的线程安全

    有一种误解,认为基础框架(Foundation framework)是线程安全的,而Application Kit是非线程安全的.不幸的是,这是一个总的概括,从而造成一点误导.每个框架都包含了线程安全 ...