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 ...
随机推荐
- Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&&Codeforces 861A k-rounding【暴力】
A. k-rounding time limit per test:1 second memory limit per test:256 megabytes input:standard input ...
- POJ 3624 Charm Bracelet(01背包裸题)
Charm Bracelet Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 38909 Accepted: 16862 ...
- GDOI 2016 & APIO 2016 游记
缓慢施工中...... UPD:APIO游记已烂尾......因为Cu滚粗+生病一直没心情写..过了几天就发现APIO的事都快忘光了...去看KPM的就可以啦 今年apio竟然没和gdoi撞...智障 ...
- CodeForces776-A.Serial Killer-string
A Serial Killer time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- HDU 2079 dp解法
选课时间(题目已修改,注意读题) Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 在jquery中防止ajax重复提交
- [图像类名词解释][ RGB YUV HSV相关解释说明]
一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间.但被描述的颜色对象本身是客观的,不同颜色空间只是从不同的角度去衡量同一个对象.颜色空间按照基本机 ...
- SQL语句整理1
THEN '月卡' THEN '周卡' THEN '季度卡' THEN '年卡' ELSE '未知卡类型' END AS '卡类型' FROM SL_Register_Info Left join用法 ...
- 从零开始学习前端JAVASCRIPT — 2、JavaScript基础ES5
1:ES5简介 ECMAScript 5.1 (或仅 ES5) 是ECMAScript(基于JavaScript的规范)标准的修正. 与HTML5规范进程本质类似,ES5通过对现有JavaScript ...
- js数组操作记录
一 .splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. arrayObject.splice(index,howmany,item1,.....,itemX) 参数 描述 in ...