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(操作符重载,运算符重载) 所谓重载就是重新赋予新的意义,之前我们已经学过函数重载,函数重载的要求是函数名相同,函数的参数列表不同(个数或者参数类型).操作符重 ...
随机推荐
- 【C++】C++中的函数
目录结构: contents structure [-] 简介 可变形参的函数 initializer_list形参 省略符形参 main函数处理命令行选项 函数指针与函数引用 inline内联函数 ...
- Effective Java 第三版——73.抛出合乎于抽象的异常
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- appium 报错
2018-11-27 18:05:56:313 - [Logcat] Logcat terminated with code 0, signal null 2018-11-27 18:05:56:31 ...
- LaTeX中的各种距离设置总结
LaTeX中的各种距离设置总结 1. 页面设置 A4 会给你一个较小的页面,为了使用更多的控制,可用 geometry宏包 和 命令 \layout . 2. 改变长度 在latex里改变长度 ...
- Python Every Class Needs a __repr__
一.思考 当我们在Python中定义一个类的时候,如果我们通过print打印这个类的实例化对象,或者我们直接输入这个类实例化对象会返回怎么样的结果,如下代码: >>> class P ...
- Linux基础知识之用户和用户组以及 Linux 权限管理
已经开始接触Linux用户管理,用户组管理,以及权限管理这几个逼格满满的关键字.这几个关键字对于前端程序猿的我来说真的是很高大上有木有,以前尝试学 Linux 的时候看到这些名词总是下意识的跳过不敢看 ...
- hive hbase区别
1.hive是sql语言,通过数据库的方式来操作hdfs文件系统,为了简化编程,底层计算方式为mapreduce. 2.hive是面向行存储的数据库. 3.Hive本身不存储和计算数据,它完全依赖于H ...
- easyUI的汇总列,在前端生成
1.easyUI初始化,启用汇总列,showFooter:true 2.后台json有默认的footer的值 {"total":28,"rows":[ {&qu ...
- 【Java】设计模型-五种单例模型
一. 什么是单例模式 只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在. 单例模式有很多好处,它能够 ...
- tf更新tensor/自定义层
修改Tensor特定位置的值 如 stack overflow 中提到的方案. TensorFlow不让你直接单独改指定位置的值,但是留了个歪门儿,就是tf.scatter_update这个方法,它可 ...