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] ...
随机推荐
- zookeeper之二:zookeeper3.7.0安装过程实操
前面分享了zookeeper的基本知识,下面分享有关zookeeper安装的知识. 1.下载 zookeeper的官网是:https://zookeeper.apache.org/ 在官网上找到下载链 ...
- GO学习-(20) Go语言基础之单元测试
Go语言基础之单元测试 不写测试的开发不是好程序员.我个人非常崇尚TDD(Test Driven Development)的,然而可惜的是国内的程序员都不太关注测试这一部分. 这篇文章主要介绍下在Go ...
- NGINX缓存使用官方指南
我们都知道,应用程序和网站一样,其性能关乎生存.但如何使你的应用程序或者网站性能更好,并没有一个明确的答案.代码质量和架构是其中的一个原因,但是在很多例子中我们看到,你可以通过关注一些十分基础的应用内 ...
- GO语言复合类型04---映射
package main import "fmt" /* 映射(map)是键值对(key-value)数据的集合 根据键key可以快速检索值value 键值的类型可以是任意的,ke ...
- Python+Selenium学习笔记8 - 多表单&多窗口切换
1.多表单切换 下图为待测页面:内嵌百度首页 切换到百度首页进行操作 1 # coding = utf-8 2 3 from selenium import webdriver 4 import os ...
- DMS是临时解决方案?
DMS是临时解决方案? Who Says DMS Is an Interim Solution? 现在是认真对待DMS驱动程序监控系统的时候了. 特斯拉(Tesla)在台湾高速公路上撞上翻倒卡车的镜头 ...
- ARMed解决方案对DSP的战争
ARMed解决方案对DSP的战争 ARM体系结构简化了数字信号处理 ARM与数字信号处理(DSP)有什么关系? ARM似乎在处理领域处于领先地位.该处理器已将其视为其最大的细分市场之一,这主要是由于该 ...
- httprunnermanager安装和配置
服务端安装mysql数据库(建议5.7以上的,mysql安装教程),设置utf-8编码,创建对应的数据库,设置好相应的用户名,密码,然后启动mysql 下载httprunnermanager 安装ht ...
- 使用regulator_get时的一个小注意事项
Linux kernel 使用 regulator 框架来管理电源,比如 PMIC 芯片上常见的LDO.使用 regulator 的常规流程如以下代码所示: void set_vbus_voltage ...
- NOIP模拟测试21「折纸·不等式」
折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #include<bits/stdc++.h> using name ...