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. JS中将对象转化为数组

    前言 其实这本来应该是一个很基础的问题了,但我之做一想记录一下是因为之前因为对象转数组的时候卡住了后来弄了出来,但最近再遇到这个问题时竟然又卡主了,所以,关于这个问题,如何把一个对象{'未完成':5, ...

  2. jmap和jstack使用

    http://blog.csdn.net/sinat_29581293/article/details/70214436

  3. 同步锁Lock

    用于解决多线程安全问题有三种方式: 同步代码块(隐式锁,基于JVM) 同步方法(隐式锁,基于JVM) 同步锁(显式锁,jdk1.5后出现,相对于前两种方式,更加灵活) 下面通过一段程序来说明一下同步锁 ...

  4. Arison [JS]window.location获取url各项参数详解

    https://www.cnblogs.com/Arison/p/5286368.html 对于这样一个URL代码如下 复制代码 http://www.php230.com :80/fisker/po ...

  5. bzoj2501

    题解: 显然,每当进入一个小的边界,那么我们的ans+1,出去一个大的边界,ans-1 然后,我们将每一个边界排序,时间小的在前,大的在后 每一次进来一个,如果是左边的边界,+1,右边的-1 然后输出 ...

  6. 【LeetCode 67_字符串_算术运算】Add Binary

    string addBinary(string a, string b) { int alen = a.size(); int blen = b.size(); ) return b; ) retur ...

  7. Java基础拾遗(一)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76358391冷血之心的博客) 马上就要秋招了,新的一轮笔试面试马上 ...

  8. memcached asp.net

    下载文件 memcached 1.解压缩文件到e:\memcached 2.命令行输入 e:\memcached\memcached.exe -d install' 3.命令行输入 e:\memcac ...

  9. node.js 之爬虫

    1. cheerio 与 request request:模拟客户端行为,对页面进行请求 cheerio:对服务器端返回的页面进行解析: var cheerio = require('cheerio' ...

  10. [svn]显示日志很慢 点击文件查看更改记录也贼慢

    特此记录,防止以后忘记. 解决办法: 在 C:\Windows\System32\drivers\etc (win7) 中加入 即可 亦或将代码的url中pc名字改为ip地址也可以解决问题 对文件夹点 ...