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(操作符重载,运算符重载) 所谓重载就是重新赋予新的意义,之前我们已经学过函数重载,函数重载的要求是函数名相同,函数的参数列表不同(个数或者参数类型).操作符重 ...
随机推荐
- masonry 基本用法
一:masonry 基本用法 fistView=[[UIView alloc] init]; fistView.backgroundColor=[UIColor redColor]; [self.vi ...
- Python-MacOSX下SIP引起的pip权限问题解决方案(非取消SIP机制)
网上很多资料都是取消SIP机制,安装完再恢复.可是基于用户的权限来安装模块包显得更加合理. 第一种:(推荐)pip install module --user -U http://www.jiansh ...
- 基础008_定浮点转化[floating point IP]
作者:桂. 时间:2018-05-15 21:55:50 链接:http://www.cnblogs.com/xingshansi/p/9042564.html 前言 本文为Xilinx float ...
- BizTalk Schedule Adapter的使用
由于BizTalk作为一个消息中间件是无状态的,一般不能主动去触发消息.因此在有一些特定的场景,比如每隔X分钟/小时/天去轮询或获取数据时就会特别不方便.不过可以通过Codeplex上的开源项目:Bi ...
- BTARN 接收消息流以3A7为例
 1.RNIFReceive.aspx 页接收来自发起方的传入消息. (如果发起方是BizTalk则类似于:http://localhost/BTARNApp/RNIFSend.aspx?TPUrl ...
- nrm 安装与npm镜像切换
家里宽带用的移动的...访问海外镜像是相当慢,npm和maven一个道理,maven可以切换到淘宝镜像或者其他的,那么npm也可以使用国内镜像,这个时候就需要用到nrm来做镜像管理了 首先这是目前本地 ...
- ssh连接服务器失败解决记录
故障:db2inst1用户无法通过ssh连接数据库服务器. 但是root用户可以连接,连接后su – db2inst1用户报错: su: cannot set user id: Resource te ...
- Canvas入门到高级详解(下)
四. Canvas 开发库封装 4.1 封装常用的绘制函数 4.1.1 封装一个矩形 //思考:我们用到的矩形需要哪些绘制的东西呢? 矩形的 x.y坐标 矩形的宽高 矩形的边框的线条样式.线条宽度 矩 ...
- 浏览器神器--vimium
自从学会了正确的坐姿,坐在电脑一整天腰也不酸了.背也不痛了,精神倍棒吃嘛嘛香 zuomeng.png 但奈何使用鼠标久了,手腕.肩膀依旧疼痛.偶尔逛知乎,看到有人推荐chrome浏览器的vimiu ...
- js this 引起的祸
注意:这里的 this 指向已经改变了. 所以不能再次使用 this 需在上面自定义变量. 那些年踩过的坑,记录一下.