python使用笔记25--深拷贝、浅拷贝
1、循环删除list
1 ll = [1,1,32,4,3,2,3,2,4,6,4,5,6,7,8]
2 for i in ll:
3 if i % 2 !=0:
4 ll.remove(i)
5 print(ll)
执行结果如下:

该段代码有问题,循环删除list,会导致下标错乱
解决办法1,代码如下:
1 import copy
2
3 ll = [1,1,32,4,3,2,3,2,4,6,4,5,6,7,8]
4 ll2 = copy.deepcopy(ll)#深拷贝
5 for i in ll2:
6 if i % 2 !=0:
7 ll.remove(i)
8 print(ll)
执行结果如图所示:

2、深拷贝、浅拷贝
深拷贝是指的拷贝之后,操作不影响原有变量
浅拷贝是指拷贝之后,对新的变量进行操作会影响原有变量
copy出来之后,如果内存地址不变,肯定是浅拷贝
copy.deepcopy 肯定是深拷贝,而且只有这一种是深拷贝
copy.copy()
list.copy()
dict.copy()这三种可能地址不一样,但是也是浅拷贝
1 a = [1, 32, 4, 3, 2, 3, 2, 4, 6, 4, 5, 6, 7, 8, {'key1': 'value1'}]
2 a1 = a #浅拷贝
3
4 a2 = copy.deepcopy(a)#深拷贝
5
6 a3 = a.copy()#浅拷贝
7
8 a4 = copy.copy(a)#浅拷贝
9
10 a.pop(1)
11 a[-1]['key1'] = 'xiaoxiaolin'
12
13 print(id(a),a)
14 print(id(a1),a1)
15 print(id(a2),a2)
16 print(id(a3),a3)
17 print(id(a4),a4)
执行结果如图所示:

a和a1内存地址一样,肯定是浅拷贝
a和a2内存地址不一样,且操作a对a2没有影响,是深拷贝
a和a3,a4内存地址不一样,但是深层次的操作a,对a3,a4有影响,是浅拷贝
python使用笔记25--深拷贝、浅拷贝的更多相关文章
- Python高级笔记(二) -- 深拷贝和浅拷贝
1. 深拷贝 1.1 类型1 注意: d没有改变, 因为d所拷贝的数据没有改变, 而是c往后添加数据. 1.2 类型2: 元组 如果copy.copy拷贝的是元组是深拷贝! 不会进行浅拷贝, 仅仅是指 ...
- python学习笔记七:浅拷贝深拷贝
原理 浅拷贝 import copy b = copy.copy(a) demo: >>> a=[1,['a']] >>> b=a >>> c=c ...
- Python入门笔记(25):Python面向对象(2)
一.类 类就是一个数据结构,封装了数据和操作. 类的声明与函数的声明十分类似: class newClass(object): """class documentatio ...
- python学习笔记25(文件管理 os包)
os包我们经常会与文件和目录打交道,对于这些操作python提供了一个os模块,里面包含了很多操作文件和目录的函数.如果你对linux基本操作了解的话,下面的一些os方法应该会很熟悉的,因为基本和li ...
- copy(python中的引用,浅拷贝,深拷贝)
#直接赋值 list = [1,2,['a','b'],'python'] #现将a等于list a = list print a [1,2,['a','b'],'python'] list.appe ...
- 【转】Python中的赋值、浅拷贝、深拷贝介绍
这篇文章主要介绍了Python中的赋值.浅拷贝.深拷贝介绍,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式,需要的朋友可以参考下 和很多语言一样,Python中 ...
- Python中复制、深拷贝和浅拷贝的区别
深拷贝定义(deepcopy) 在Python中,由于一切皆对象,所以任何变量都可以被引用,也即可以被赋值给任何变量.但是在Python中,给变量赋值,是区分的,一般情况下,Python中的变量赋值都 ...
- 【04】Python 深拷贝浅拷贝 函数 递归 集合
1 深拷贝浅拷贝 1.1 a==b与a is b的区别 a == b 比较两个对象的内容是否相等(可以是不同内存空间) a is b 比较a与b是否指向同一个内存地址,也就是a与b的id是否相 ...
- python集合增删改查,深拷贝浅拷贝
集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...
- Python中什么是深拷贝和浅拷贝且有什么区别
浅拷贝: >>> a = [1, 2, 3] >>> b = a >>> a [1, 2, 3] >>> b [1, 2, 3] ...
随机推荐
- Error attempting to get column from result set
当使用mybatis plus3.2.0+springboot2.1.1 报错 Error attempting to get column from result set 1.一般出现这种问题,最简 ...
- AI+IoT+电池应用
AI+IoT+电池应用 AIoT电池 突破你的想象 将行业领先的电池电化学技术与前沿的能源物联网最佳实践相结合,利用智能物联技术开展电池全生命周期的管理优化和交叉领域的协同应用,解锁动力电池全生命周期 ...
- springcloud-config配置异常Cannot clone or checkout repository 和 Authentication is required but no CredentialsProvider has been registered解决过程
Cannot clone or checkout repository, 出现这个异常,通过检查是因为自己本地没有配置 ssh,所以配置了, https://blog.csdn.net/zy_2818 ...
- 牛客网sql实战参考答案(mysql版):1-15
1.查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天(sqlite里面的注释为--,mysql为comment) CREATE TABLE `employees ...
- 【VBA】日期时间
当前日期: Sub 测试() Debug.Print Date End Sub 当前时间: Sub 测试() Debug.Print Date End Sub 几月: Sub 测试() Debug.P ...
- 腾讯TencentOS 十年云原生的迭代演进之路
导语 TencentOS Server (又名 Tencent Linux 简称 Tlinux) 是腾讯针对云的场景研发的 Linux 操作系统,提供了专门的功能特性和性能优化,为云服务器实例中的应用 ...
- Ajax 和 JSON
Ajax:异步更新页面的技术,必须在http或者https网络网络协议下使用 1.原生js实现:共4步 2.jQuery:$.ajax(配置对象); ...
- Qt实现网络聊天室(客户端,服务端)
1. 效果演示 客户端 服务器 连接成功之后 2. 预备知识 如果不知道网络编程的可以去看我的上一篇文章C++网络编程 在Qt中,实现网络编程的方式比用C++或C实现要方便简单许多,因为Qt已经替我们 ...
- Netty 框架学习 —— 引导
概述 前面我们学习了 ChannelPipeline.ChannelHandler 和 EventLoop 之后,接下来的问题是:如何将它们组织起来,成为一个可实际运行的应用程序呢?答案是使用引导(B ...
- Jenkins 进阶篇 - 节点配置
当我们使用 Jenkins 构建的项目达到一定规模后,一个 Jenkins 服务可能承受不了负载,会导致很多的构建任务堆积,严重的话还会拖垮这台服务器,导致上面的服务无法使用.例如我们公司目前在 Je ...