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. (1) iOS开发之UI处理-预览篇

    不管是做iOS还是Android的开发,我想UI这块都是个大麻烦,任何客户端编程都是如此,我们要做的就是尽量减少我们工作的复杂度,这样才能更轻松的工作. 在iOS开发中Xcode虽然自带了强大的IB( ...

  2. linux-git shell colors

    git config --global color.status auto git config --global color.diff auto git config --global color. ...

  3. day22 CMDB 基础部分 (一)

    参考博客: http://www.cnblogs.com/alex3714/articles/5420433.html

  4. MySQL Block Nested-Loop Join(BNL)

    5.5 版本之前,MySQL本身只支持一种表间关联方式,就是嵌套循环(Nested Loop).如果关联表的数据量很大,则join关联的执行时间会非常长.在5.5以后的版本中,MySQL通过引入BNL ...

  5. CSS3 文本超出后显示省略号...

    纯用CSS实现,主要采用代码 overflow:hidden; text-overflow:ellipsis;//这是让文本溢出后,显示成省略号. white-space:nowrap;//禁止自动换 ...

  6. 【css】CSS3 Media Queries 详解【转】

    说起CSS3的新特性,就不得不提到 Media Queries .最近 Max Design 更新的一个泛读列表里,赫然就有关于 Media Queries 的文章.同时位列其中的也有前天我刚刚翻译的 ...

  7. [转载]面试心得与总结---BAT、网易、蘑菇街等

    转载自:http://mp.weixin.qq.com/s?__biz=MzIzMDIxNTQ3NA==&mid=2649111851&idx=1&sn=f43c42f7262 ...

  8. easychm生成帮助文件时出现的目录导航乱码问题

    将html生成帮助文件时出现乱码问题的主要原因是:文件编译格式的问题 (一般的网页都是utf-8格式的,将其改为GB2312就可以了):

  9. MetaPost使用

    简介 MetaPost是一种制图语言,由John D. Hobby开发. 如果你要学习它,可以去下面的网址看看. 官网:http://tug.org/metapost 权威手册:http://tug. ...

  10. EasyDSS RTMP流媒体服务器videojs flash播放RTMP/HLS提示错误的解决方案

    本文转自EasyDSS团队成员StarIT的博客:http://blog.csdn.net/staritstarit/article/details/73692715 问题 在博客<EasyDS ...