Day2-Python基础2---浅copy、深copy的差别
浅copy
首先我们来看下面一段代码:
1 >>> names = ["maqing"," peilin"," xiaoming"," lilei"," hanmeimei",["maqing","wangchuan","lilong"]]
2 >>> names2 = names.copy()
3 >>> print(names)
4 ['maqing', ' peilin', ' xiaoming', ' lilei', ' hanmeimei', ['maqing', 'wangchuan', 'lilong']]
5 >>> names[2] = "小明"
7 >>> print(names)
8 ['maqing', ' peilin', '小明', ' lilei', ' hanmeimei', ['maqing', 'wangchuan', 'lilong']]
9 >>> print(names2)
10 ['maqing', ' peilin', ' xiaoming', ' lilei', ' hanmeimei', ['maqing', 'wangchuan', 'lilong']]
11 >>> names[-1][2] = "李龙"
12 >>> print(names)
13 ['maqing', ' peilin', '小明', ' lilei', ' hanmeimei', ['maqing', 'wangchuan', '李龙']]
14 >>> print(names2)
15 ['maqing', ' peilin', ' xiaoming', ' lilei', ' hanmeimei', ['maqing', 'wangchuan', '李龙']]
第一步:修改names中'xiaoming'的值为中文"小明",输出列表发现只有names中修改了,但names2中没有修改,符合copy的性质。
第二步:修改names中二级列表"lilong"的值为"李龙",输出names和names2,我们发现'lilong'的值都改为中文了,貌似这不符合copy的性质。
这种copy我们称之为浅copy
浅copy的方法有三种:
- 使用切片[:]操作
- 使用工厂函数(如list/dir/set)
- 使用copy模块中的copy()函数
person = ['name',['saving',100]]
p1 = copy.copy(person)
p2 = person[:]
p3 = list(person)
深copy
>>> import copy
>>> names = ["Will", 28, ["Python", "C#", "JavaScript"]]
>>> names2 = copy.deepcopy(names)
>>> names[1] = ''
>>> print(names)
['Will', '', ['Python', 'C#', 'JavaScript']]
>>> print(names2)
['Will', 28, ['Python', 'C#', 'JavaScript']]
>>> names[2][1] = "Ruby"
>>> print(names)
['Will', '', ['Python', 'Ruby', 'JavaScript']]
>>> print(names2)
['Will', 28, ['Python', 'C#', 'JavaScript']]
总结
本文介绍了对象的赋值和拷贝,以及它们之间的差异:
- Python中对象的赋值都是进行对象引用(内存地址)传递
- 使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用.
- 如果需要复制一个容器对象,以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝
- 对于非容器类型(如数字、字符串、和其他’原子’类型的对象)没有被拷贝一说
- 如果元祖变量只包含原子类型对象,则不能深拷贝,看下面的例子
Day2-Python基础2---浅copy、深copy的差别的更多相关文章
- Day2 - Python基础2 列表、字典、集合
Python之路,Day2 - Python基础2 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一, ...
- python3 完全理解赋值,浅copy,深copy 通过地址详细理解~
额...老规矩,先来一天NLP再说,也没几条了. 十,在任何一个系统里,最灵活的部分是最能影响大局的部分 灵活便是有一个以上的选择,选择便是能力,因此最灵活的人便是最有能力的人. 灵活来自减少只相信自 ...
- Py修行路 python基础 (四)运算 copy
字符串的格式化 在字符串中插入 %s ,作为占位符,后边儿再定义插入变量. 算术运算 % 取模 判断奇偶数 / 除法 有小于号 // 取整除 返回整数部分 逻辑运算 and or not ' ...
- Python day2 ---python基础2
本节内容 列表. 元组操作 购物车程序 字符串操作 字典操作 3级菜单 作业(购物车优化) 1. 列表操作 1.定义列表names = ['Alex',"Tenglan",'Eri ...
- python基础05--深浅copy, set,bytes
1.1 深浅 copy 1. = 赋值操作, lis1=[1,2,3] list2 = list1 list1.append(4) 则list1,list2都变 赋值都指向同一个地址,改变一个 ...
- Python 基础之函数、深浅copy,set及练习
三元运算符通常在Python里被称为条件表达式,这些表达式基于真(true)/假(not)的条件判断,在Python 2.4以上才有了三元操作. 语法格式: X if C else Y 有了三元表达式 ...
- Python之路,Day2 - Python基础(转载Alex)
Day2-转自金角大王 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存 ...
- Python之路,Day2 - Python基础2
def decode(self, encoding=None, errors=None): """ 解码 """ ""& ...
- Day2 python基础学习
http://www.pythondoc.com/ Python中文学习大本营 本节内容: 一.字符串操作 二.列表操作 三.元组操作 四.字典操作 五.集合操作 六.字符编码操作 一.字符串操作 1 ...
- Day2 Python基础学习——字符串、列表、元组、字典、集合
Python中文学习大本营:http://www.pythondoc.com/ 一.字符串操作 一.用途:名字,性格,地址 name = 'wzs' #name = str('wzs')print(i ...
随机推荐
- INSPIRED启示录 读书笔记 - 第26章 合理运用敏捷方法
十大秘诀 1.产品经理即是产品负责人,他代表了客户的需求,因而需要与产品开发团队保持密切的联系,协助督促开发进程,及时解决出现的问题 2.使用敏捷方法绝不等于省略产品规划.规划周期应该适度缩短,反复迭 ...
- windows10添加电源计划修改的快捷方案
转自:http://news.mydrivers.com/1/431/431346.htm 由于目前的Windows 10预览版在UI方面还未优化到位,所以某些设置选项要想找出来是很难的,这时候如果能 ...
- 山东省第六届ACM省赛 H---Square Number 【思考】
题目描述 In mathematics, a square number is an integer that is the square of an integer. In other words, ...
- 解决spring、springMVC重复扫描导致事务失效的问题
在主容器中(applicationContext.xml),将Controller的注解排除掉 1 2 3 而在springMVC配置文件中将Service注解给去掉 1 2 3 4 因为spring ...
- Servlet和Filter的url匹配以及url-pattern详解
Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单,老少皆宜.估计大多数朋友都是直接配置用,也没有关心过具体的细节,今天遇到一个问题,上网查了servlet的规范才发现,ser ...
- How to choose from Viewstate, SessionState, Cookies and Cache
https://devshop.wordpress.com/2008/04/10/how-to-choose-from-viewstate-sessionstate-cookies-and-cache ...
- springcloud一些概念知识
1.Eureka 1)Eureka服务治理体系支持跨平台 2)三个核心概念:服务注册中心.服务提供者以及服务消费者 3)服务续约:注册完服务之后,服务提供者会维护一个心跳来不停的告诉Eureka Se ...
- HBase协处理器的使用(添加Solr二级索引)
给HBase添加一二级索引,HBase协处理器结合solr 代码如下 package com.hbase.coprocessor; import java.io.IOException; import ...
- Linux centos 6.5 搭建 svn服务器
实例:web1 1.安装subversion #yum install subversion #mkdir -p /oop/svn/ //创建svn目录 #chmod -R 777 /oop/svn ...
- SFTP服务器使用指南(1)——安装搭建freeSSHd
为什么选择freeSSHd 此软件免费 功能非常丰富且强大,同时支持软件用户.本地系统用户和域用户验证 对各用户选择性开放SFTP,Telnet, Tunneling服务 功能和服务完全不受限制的使用 ...