一、循环删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)的更多相关文章

  1. 【04】Python 深拷贝浅拷贝 函数 递归 集合

    1 深拷贝浅拷贝 1.1 a==b与a is b的区别 a == b    比较两个对象的内容是否相等(可以是不同内存空间) a is b  比较a与b是否指向同一个内存地址,也就是a与b的id是否相 ...

  2. python集合增删改查,深拷贝浅拷贝

    集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...

  3. python: 序列化/反序列化及对象的深拷贝/浅拷贝

    一.序列化/反序列化 python中内置了很多序列化/反序列化的方式,最常用的有json.pickle.marshal这三种,示例用法如下: import json import pickle imp ...

  4. python 深浅拷贝 for循环删除

    ###########################总结########################### 1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 a='aaaa' ls ...

  5. python27期day07:基础数据类型补充、循环删除的坑、二次编码、作业题。

    1.求最大位数bit_length: a = 10 #8421 1010print(a.bit_length())结果:42.capitalize首字母变大写: s = "alex" ...

  6. 【学习笔记】--- 老男孩学Python,day8 知识点补充 join,列表不能循环删除,深浅copy

    1. 补充基础数据类型的相关知识点 1. str. join() 把列表变成字符串 2. 列表不能再循环的时候删除. 因为索引会跟着改变 3. 字典也不能直接循环删除. 把要删除的内容记录在列表中. ...

  7. Python--增量循环删除MySQL表数据

    需求场景: 有一业务数据库,使用MySQL 5.5版本,每天会写入大量数据,需要不定期将多表中“指定时期前“的数据进行删除,在SQL SERVER中很容易实现,写几个WHILE循环就搞定,虽然MySQ ...

  8. Python深复制浅复制or深拷贝浅拷贝

    1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.(比深拷贝更加节省内存)2. copy.deepcopy 深拷贝 拷贝对象及其子对象 用一个简单的例子说明如下: >& ...

  9. [置顶] operator overloading(操作符重载,运算符重载)运算符重载,浅拷贝(logical copy) ,vs, 深拷贝(physical copy)

    operator overloading(操作符重载,运算符重载) 所谓重载就是重新赋予新的意义,之前我们已经学过函数重载,函数重载的要求是函数名相同,函数的参数列表不同(个数或者参数类型).操作符重 ...

随机推荐

  1. ubuntu sudoers配置错误

    ubuntu16 sudoers配置错误,普通用户无法使用sudo了,且root帐户也没启动. 重启,按住esc,选择恢复模式,选择root模式 mount -o remount rw / 修改文件至 ...

  2. __NSArrayI __NSArray0 __NSSingleObjectArrayI __NSPlaceholderArray __NSArrayM

    如果你的 全局 可变数组 前面  用了  copy修饰,那么 调用   arr addObjectsFromArray: 的时候 就 会崩溃,而且提示你  是  [__NSArray0 addObje ...

  3. 批量备份数据库脚本(PowerShell版)

    开始 昨天备份一个数据库拿来测试,发现备份后的文件非常大.后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能. 现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(CopyOnly). ...

  4. 关于在最新的 Visual Studio 2017 版本中使用 Web Deploy 遇到的 SSL 连接错误

    错误信息: 无法完成向远程代理 URL 发送请求.请求被中止: 未能创建 SSL/TLS 安全通道. 原因分析: 最新版本的 Visual Studio 中,已经抛弃了 https 协议中旧版 SSL ...

  5. 公用表表达式(CTE)

    在编写T-SQL代码时,往往需要临时存储某些结果集.前面我们已经广泛使用和介绍了两种临时存储结果集的方法:临时表和表变量.除此之外,还可以使用公用表表达式的方法.公用表表达式(Common Table ...

  6. 【转载】vi/vim使用进阶: 指随意动,移动如飞 (一)

    vi/vim使用进阶: 指随意动,移动如飞 (一) << 返回vim使用进阶: 目录 本节所用命令的帮助入口: :help usr_03.txt :help motion.txt :hel ...

  7. tf训练OTSU

    训练一个简单的回归网络 基础的函数如下: # coding=utf-8 import tensorflow as tf import numpy as np np.random.seed(0) # 卷 ...

  8. 【iCore4 双核心板_ARM】例程三十:U_DISK_IAP_FPGA实验——更新升级FPGA

    实验现象及操作说明: 1.将升级文件拷入U盘system文件夹中,通过U盘转接线将U盘连接到iCore4 USB OTG接口. 2.烧写程序成功,绿色ARM·LED灯点亮,三色FPGA·LED灯循环点 ...

  9. SpringMvc的Url映射和传参案例(转)

    Springmvc的基本使用,包括url映射.参数映射.页面跳转.ajax和文件上传 以前学习的时候写的代码案例,今天整理笔记的时候找到了,很久没有来园子了,发上来当个在线笔记用吧,免的时间长了又忘了 ...

  10. Unity读Excel 输出PC端(Windows)后不能读取的问题

    问题:在Unity中用ExcelDataReader读Excel时,在编辑器模式下可以正常读取,但是在导出PC端app后读Excel却会报空,Excel读取失败. 要点: 1.把库文件Excel.dl ...