Python——深浅Copy
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的更多相关文章
- python深浅copy探究
引入 在python程序中,如果我们操作一个变量的值去做运算,而又想在下次调用时,仍使用原来的变量的值去做运算,那么我们我们就需要将这个变量去做备份,这就是本文所要探究的问题. 开始 变量-对象-引用 ...
- Python 深浅copy 和文件操作
深浅copy 1,先看赋值运算. l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['barry', ...
- python深浅copy
预备知识一——python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,了解一下python内存中变量的存储情况. 在高级语言中,变量是对内存及其地址的抽象.对于py ...
- python深浅copy和赋值
Python直接赋值,浅copy和深copy的比较 基于引用和对象(python引用和对象分离) 总结: 直接赋值:a = b -->a,b两个引用指向相同的对象 浅copy:a为b的copy ...
- python 深浅copy的例子
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepcopy 深拷贝 拷贝对象及其子对象一个很好的例子:import copya = [1, 2, 3, ...
- python 深浅copy总结
总结: ''' 总结:假设l1为原数据,l2为deepcopy后的数据: 1.浅copy,只能改变第一层的内存地址(不可变数据类型除外). 2.深copy,能够改变第一层和第二层的内存地址(不可变数据 ...
- 番外:深浅copy
进击のpython 深浅copy copy是什么意思? 复制 (又学一个单词!开不开森) 那啥叫复制呢? 百度百科上给的解释是:仿原样品制造 我们曾经有过这样的印象 a = "zhangsa ...
- python基础3(元祖、字典、深浅copy、集合、文件处理)
本次内容: 元祖 字典 浅copy和深copy 集合 文件处理 1.1元祖 元祖(tuple)与列表类似,不同之处在于元祖的元素不能修改,元祖使用小括号(),列表使用方括号[].元祖创建很简单,只需要 ...
- python学习笔记三 深浅copy,扩展数据类型(基础篇)
深浅copy以及赋值 对于字符串和数字而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy n1 = #n1 = 'hahahaha' #赋值n2 = n1#浅co ...
随机推荐
- js排序算法02——插入排序
插入排序的思路是我们默认数组的第一个元素是有序的,从第二个元素开始依次和前面的元素比较,如果前面的元素大,就将前面的元素往后移一位,如果前面的元素小,就把该元素放在前面元素的后面.其实就和我们玩扑克牌 ...
- Qt 元对象系统(Meta-Object System)
(转自:http://blog.csdn.net/aladdina/article/details/5496891) Qt的元对象系统基于如下三件事情: 类:QObject,为所有需要利用原对象系统的 ...
- LeetCode OJ:Sudoku Solver(数独游戏)
Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...
- 【html】META http-equiv 大全
meta是html语言head区的一个辅助性标签.几乎所有的网页里,我们可以看到类似下面这段的html代码: <head><meta http-equiv="content ...
- 转载-lvs官方文档04-LVS集群的负载调度
LVS集群的负载调度 章文嵩 (wensong@linux-vs.org) 2002 年 5 月 本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法.针对请求的服务时间变 ...
- CentOS7 开通特定防火墙端口
>>> 开启端口 firewall-cmd --zone=public --add-port=/tcp --permanent 命令含义: --zone #作用域 --add-po ...
- 【LeetCode 111_二叉树_遍历】Minimum Depth of Binary Tree
解法一:递归 int minDepth(TreeNode* root) { if (root == NULL) ; if (root->left == NULL) { ; } else if ( ...
- 记用ajax网页跳转大坑——后台执行了,但是没有跳转
搭建javaweb服务器的时候,把jsp文件放在WEB-INF目录下面,因为超链接不能所有只能通过拦截器,用do方法跳转 controller写的是对的: @Controller public cla ...
- 一个浮动 css3效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- word中怎么快速选中光标之前或之后的全部内容?
在Word中,快速选中=光标之后=的全部内容的快捷键:Ctrl + Shift + End:在Word中,快速选中=光标之前=的全部内容的快捷键:Ctrl + Shift + Home.在Word中, ...