09_Python深拷贝、浅拷贝
一、循环列表,删除其中的元素
l1 = [1,2,3,4,5,6,7] 循环删除奇数位元素
1.正序循环删除,会出现越界情况,所以采用倒叙的方式删除
l1 = [1,2,3,4,5,6,7]
for i in range(len(l1) - 1,-1,-1):
if i % 2 == 1:
l1.pop(l1[i]) print(l1)
二、循环字典,删除其中的元素
如果循环删除的话,编译器会报 RuntimeError: dictionary changed size during iteration
#错误代码
#dic = {'k1':'zhangsan','k2':'lisi','k3':'wangwu','name':'xiaoming'} 删除带k的key
dic = {'k1':'zhangsan','k2':'lisi','k3':'wangwu','name':'xiaoming'} for i in dic:
if 'k' in i:
del dic[i] print(dic)
真确的方式,是把key放到一个列表中,然后根据列表元素进行删除
#正确的代码
dic = {'k1':'zhangsan','k2':'lisi','k3':'wangwu','name':'xiaoming'}
l1 = []
for i in dic:
if 'k' in i:
l1.append(i) for i in l1:
del dic[i] print(dic)
三、深拷贝、浅拷贝
浅拷贝
3.1赋值就是指向同一块内存空间
str是不可变类型,所以当修改的时候会替换旧的对象,产生一个新的地址。
str1 = 'zhangsan'
str2 = str1 #两个地址相同
str1 = 'lisi'
print(id(str1))
print(id(str2))
3.2列表拷贝
l1 = [1,2,3,4]
l2 = l1.copy()
l1.append('') print(l1,id(l1))
print(l2,id(l2))
3.3列表嵌套拷贝
l1 = [1,2,[44,55,66],3,4]
l2 = l1.copy()
l1[2].append('') print(l1,id(l1))
print(l2,id(l2))
对于浅拷贝,第一层是独立的内存块,从第二层嵌套开始,都是指向同一个内存地址,一变都变
l1 = [1,2,[44,55,66],3,4]
l2 = l1.copy()
l1[2].append('') print(l1,id(l1))
print(l2,id(l2))
print(l1,id(l1[2]))
print(l2,id(l2[2]))
深拷贝
对于深拷贝来说,无论多少层,在内存中都是两个独立的内存块。
import copy l1 = [1,2,[44,55,66],3,4]
l2 = copy.deepcopy(l1)
l1[2].append('') print(l1,id(l1))
print(l2,id(l2))
print(l1,id(l1[2]))
print(l2,id(l2[2]))
09_Python深拷贝、浅拷贝的更多相关文章
- c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参
c# 通用类型系统 及变量在 深拷贝 浅拷贝 函数传参 中的深层次的表现 在编程中遇到了一些想不到的异常,跟踪发现,自己对于c#变量在内存上的表现理解有偏差,系统的学习并通过代码实验梳理了各种情况下, ...
- python集合增删改查,深拷贝浅拷贝
集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...
- JavaScript之深拷贝&浅拷贝
深拷贝&浅拷贝,说起来都明白,但是说不出所以然.今天就系统的整理下思绪,一点点的将其分析出所以然 废话不多说 浅拷贝 简单的说就是一个值引用,学生时代接触过编程的人都应该了解过指针,浅拷贝可以 ...
- 【opencv】imread 赋值 深拷贝浅拷贝
import cv2 import copy import os def filter_srcimg(dstimg): ss=3 srcimg=copy.deepcopy(dstimg) #aa=5 ...
- Java基础 深拷贝浅拷贝
Java基础 深拷贝浅拷贝 非基本数据类型 需要new新空间 class Student implements Cloneable{ private int id; private String na ...
- 【04】Python 深拷贝浅拷贝 函数 递归 集合
1 深拷贝浅拷贝 1.1 a==b与a is b的区别 a == b 比较两个对象的内容是否相等(可以是不同内存空间) a is b 比较a与b是否指向同一个内存地址,也就是a与b的id是否相 ...
- JS Object Deep Copy & 深拷贝 & 浅拷贝
JS Object Deep Copy & 深拷贝 & 浅拷贝 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...
- Map拷贝 关于对象深拷贝 浅拷贝的问题
问题:map拷贝时发现数据会变化. 高能预警,你看到的下面的栗子是不正确的,后面有正确的一种办法,如果需要看的话的,请看到底,感谢各同学的提醒,已做更正,一定要看到最后 先看例子: ...
- clone 深拷贝 浅拷贝
1. 定义:知道一个对象,但不知道类,想要得到该对象相同的一个副本,在修改该对象的属性时,副本属性不修改,clone的是对象的属性 2. 意义:当一个对象里很多属性,想要得到一个相同的对象,还有set ...
随机推荐
- ubuntu下查看-卸载软件(卸载.net core sdk的方法)
查看已安装的包:dpkg --list 查看正则匹配的包:dpkg --list 'dotnet-*' //查看以dotnet-开头的包 卸载匹配的包:sudo apt-get --purge rem ...
- Spring(一)Spring的第一滴血
前言 开始工作了,但是一进来公司本来是做爬虫和数据分析的,但是走了一个后端的,导致我必须要去顶替他的工作.因为这个项目使用的是Spring. SpringMVC.Hibernate所以我又要去回忆一下 ...
- codechef [snackdown2017 Onsite Final] Fusing Weapons
传送门 题目描述 大厨最近迷上了一款勇者斗恶龙的游戏. 游戏每局开始前,会有 N 件武器摆成一圈.每件武器有一个整数的等级.大厨可以选择两件 相邻的等级相同(不妨设同为 A 级)的武器,将它们合成.这 ...
- bzoj4332;vijos1955:JSOI2012 分零食
描述 这里是欢乐的进香河,这里是欢乐的幼儿园. 今天是2月14日,星期二.在这个特殊的日子里,老师带着同学们欢乐地跳着,笑着.校长从幼儿园旁边的小吃店买了大量的零食决定分给同学们.听到这个消息,所有同 ...
- 《SpringMVC从入门到放肆》四、SpringMVC配置式开发(处理器映射器)
上一篇我们讲解了DispatcherServlet的url-pattern配置详解,今天我们来真正对SpringMVC进行配置式开发.所谓配置式开发是指“处理器类是程序员自己定义的.实现了特定接口的类 ...
- 安装配置最强Spark IDE--IDEA
1.安装IntelliJ IDEA IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示 ...
- UEP-查询方式总结
public void retrieve() { QueryParamList params = getQueryParam("dataWrap"); //获取页面上的参数,即查询 ...
- Deep Learning速成教程
引言 深度学习,即Deep Learning,是一种学习算法(Learning algorithm),亦是人工智能领域的一个重要分支.从快速发展到实际应用,短短几年时间里, ...
- [学习OpenCV攻略][012][读取、修改、保存图像]
使用 imread 读取图像,图像路径为 imageName ,图像按BGR格式读取. image = imread( imageName, CV_LOAD_IMAGE_COLOR); 将RGB图像转 ...
- 《You dont know JS》类型篇总结
类型 javaScript中的类型和熟知的一些强类型语言的有关类型的定义是不一样的.在js中,类型的含义是值的内部特征,它定义了值得行为,以使其区别于其他值.(a type is an intrins ...