day5_不能循环删除list-深拷贝、浅拷贝(import copy)
一、循环删list里面的元素,会导致下标错位,结果是不对的举例:想删除奇数
l = [1,1,1,2,3,4,5]
for i in l:
if i%2 !=0:
l.remove(i) #删除后,导致下标错位了,有的值被错过了不会被删除。
print(l)
结果:
[, , ]
可解决方式:
l = [1,1,1,2,3,4,5]
l2 = [1,1,1,2,3,4,5] #在定义个l2和l相同
for i in l2: #循环的是l2
if i%2 !=0:
l.remove(i) #删除的是l
print(l)
结果:
[2, 4]
list里面的copy()方法也是浅拷贝
引发出问-深拷贝、浅拷贝
二、深拷贝、浅拷贝
深拷贝会开辟新的内存地址,浅拷贝不会用一个内存地址
l = [1,1,1,2,3,4,5] #跟深拷贝一样
l2 =l #浅拷贝#这种不行,l存的实际是内存地址,l2又定义了个变量,把l赋值给l2,说明l2指向的内存地址和l相同。l删除后,l2也删除了,因为用的是一块儿内存地址
查看内存地址;print(id(l))
import copy #引入模块-深拷贝功能
1、‘=’:用等号来赋值,新的变量和原来的变量实际上指向的是同一个地址,等号连接起来的变量互相影响
2、浅拷贝copy
注:import copy后使用的copy函数和python自带的copy函数作用是相同的(copy.copy(x)=x.copy())
拷贝原list变量的第一层,之后对新变量或者旧变量的第一层的修改不会影响到彼此,第二层以及更多层之间则是像第一中操作中一样,是互相影响的。什么是第一层呢
l =[1,2,[3,4]]
那么1,2,[3,4]都属于第一层的元素,在新变零中修改第一层的元素不会影响到原变量,同样,在原变量中修改第一层的元素也不会影响到新变量;而3,4属于第第二层中的元素,对他们修改会影响到用浅拷贝连接起来的所有变量中的第二层元素:
修改原变量观察对新变量的影响:
import copy
l =[1,2,[3,4]]
l2 = copy.copy(l) #copy()函数,
l3 = l.copy() #列表自带的copy()方法
l[0] =0
l[2][0]=9
print('l=',l)
print('l2=',l2)
print('l3 =',l3)
输出:
l= [0, 2, [9, 4]]
l2= [1, 2, [9, 4]]
l3 = [1, 2, [9, 4]]
修改新变量,对原变量的影响:
l =[1,2,[3,4]]
l2 = copy.copy(l) #copy()函数,
l3 = l.copy() #列表自带的copy()方法
l2[0] =0
l2[2][0]=9
print('l=',l)
print('l2=',l2)
print('l3 =',l3)
输出:
l= [1, 2, [9, 4]]
l2= [0, 2, [9, 4]]
l3 = [1, 2, [9, 4]]
3、深拷贝deepcopy
复制出来的与原来的变量没有任何关系,最清爽的复制
import copy
l = [1,1,1,2,3,4,5]
l2 = copy.deepcopy(l) #深拷贝
print(id(l))
print(id(l2))
结果:
18649160
18553288
字符串/元组的拷贝问题说明:字符串是不可变的。
a = '小黑'
b = a #重新开辟了新内存,不会像list一样,和a用一个内存地址
a = '小白' #a重新复制不会互相影响
print(a)
print(b)
输出:
小白
小黑
day5_不能循环删除list-深拷贝、浅拷贝(import copy)的更多相关文章
- 【04】Python 深拷贝浅拷贝 函数 递归 集合
1 深拷贝浅拷贝 1.1 a==b与a is b的区别 a == b 比较两个对象的内容是否相等(可以是不同内存空间) a is b 比较a与b是否指向同一个内存地址,也就是a与b的id是否相 ...
- python集合增删改查,深拷贝浅拷贝
集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...
- python: 序列化/反序列化及对象的深拷贝/浅拷贝
一.序列化/反序列化 python中内置了很多序列化/反序列化的方式,最常用的有json.pickle.marshal这三种,示例用法如下: import json import pickle imp ...
- python 深浅拷贝 for循环删除
###########################总结########################### 1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 a='aaaa' ls ...
- python27期day07:基础数据类型补充、循环删除的坑、二次编码、作业题。
1.求最大位数bit_length: a = 10 #8421 1010print(a.bit_length())结果:42.capitalize首字母变大写: s = "alex" ...
- 【学习笔记】--- 老男孩学Python,day8 知识点补充 join,列表不能循环删除,深浅copy
1. 补充基础数据类型的相关知识点 1. str. join() 把列表变成字符串 2. 列表不能再循环的时候删除. 因为索引会跟着改变 3. 字典也不能直接循环删除. 把要删除的内容记录在列表中. ...
- Python--增量循环删除MySQL表数据
需求场景: 有一业务数据库,使用MySQL 5.5版本,每天会写入大量数据,需要不定期将多表中“指定时期前“的数据进行删除,在SQL SERVER中很容易实现,写几个WHILE循环就搞定,虽然MySQ ...
- Python深复制浅复制or深拷贝浅拷贝
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.(比深拷贝更加节省内存)2. copy.deepcopy 深拷贝 拷贝对象及其子对象 用一个简单的例子说明如下: >& ...
- [置顶] operator overloading(操作符重载,运算符重载)运算符重载,浅拷贝(logical copy) ,vs, 深拷贝(physical copy)
operator overloading(操作符重载,运算符重载) 所谓重载就是重新赋予新的意义,之前我们已经学过函数重载,函数重载的要求是函数名相同,函数的参数列表不同(个数或者参数类型).操作符重 ...
随机推荐
- iOS 线上版本图片资源格式的问题导致的闪退
链接:https://www.jianshu.com/p/6492779cb89e來源:简书 导致这种问题的原因是:在 Xcode 8 中,当你资源文件中[含有16位图]或者[图片显示模式γ值为'P3 ...
- MySQL 8 中新的复制功能
MySQL 8 中新的复制功能使得操作更加方便,并帮助用户更好地观察复制过程中内部发生的情况. 使用 MySQL 5.7.17 获取 MySQL 组复制插件是一项巨大的工作.组复制是一个新的插件,通过 ...
- 摘:PC客户端 XP兼容性调查
现象1:XP SP2下,客户端安装失败(或者启动失败) 解决方案:需要安装以下3个补丁(已经集成到安装包中) ==系统Hotfix(仅仅XP SP2需要安装): http://support.micr ...
- Spark 精品文章转载(目录)
学习 Spark 中,别人整理不错的文章,转载至本博客,方便自己学习,并按照不同的模块归档整理.每个文章作者能力不同,写文章所处的时间点不同,可能会略有差异,在阅读的同时,注意当时的文章的内容是否已经 ...
- glide引出恶心的git submodule
起因 某一天一个同事,在看那个glide,然后我路过,看到他为何不编译“glide”项目(他说,编译中出错,反正都是看源码而已,所以就懒得搞,然后我出于“好心”,给他弄一下,我擦) 报错: Pro ...
- TensorFlow与caffe中卷积层feature map大小计算
刚刚接触Tensorflow,由于是做图像处理,因此接触比较多的还是卷及神经网络,其中会涉及到在经过卷积层或者pooling层之后,图像Feature map的大小计算,之前一直以为是与caffe相同 ...
- mpvue 未找到入口 app.json 文件
# 1. 先检查下 Node.js 是否安装成功 $ node -v v8.9.0 $ npm -v 5.6.0 到项目的目录 $ npm install $ npm run dev
- box-shadow比较美观的阴影
无奈每次调阴影都特别丑,这次我把它记下来,下次不调了 box-shadow: 0 5px 15px -5px rgba(0,0,0,.5);
- C# 鼠标移动Winform窗体内或者panel容器内的控件 显示虚线/实现虚线框来确定位置
C# 鼠标移动WinForm窗体或者panel容器内的控件 移动虚线/实现虚线框来确定位置 1.用到的方法介绍 今天,根据领导指示指导移动容器内的控件,生成虚线框,使用 ControlPaint.Dr ...
- 字符串匹配的 Boyer-Moore 算法
上一篇文章,我介绍了 字符串匹配的KMP算法 但是,它并不是效率最高的算法,实际采用并不多.各种文本编辑器的” 查找” 功能(Ctrl+F),大多采用 Boyer-Moore 算法. 下面,我根据 M ...