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 ...
随机推荐
- 【JavaScript_DOM 淘宝购物车】
让我们一起看一下淘宝的购物车是怎么做的吧,刚刚入门的我可能很多地方的用法都不够优化,不过个人感觉先把逻辑清晰之后再做的话其实也并不难哦, 以下是我做的页面代码: HTML代码: <!DOCTYP ...
- Vijos P1116 一元三次方程求解【多解,暴力,二分】
一元三次方程求解 描述 有形如:ax^3+bx^2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之 ...
- Codeforces Round #300(Div. 2)-538A.str.substr 538B.不会 538C.不会 。。。
A. Cutting Banner time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- 51 Nod 1119
机器人走方格 V2 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N ...
- poj_2503(map映射)
题目链接poj2503 Babelfish Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 38820 Accepted: ...
- A + B Problem II(大数加法)
http://acm.hdu.edu.cn/showproblem.php?pid=1002 A + B Problem II Time Limit: 2000/1000 MS (Java/Other ...
- 浅析Entity Framework Core2.0的日志记录与动态查询条件
前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core2.0的日志记录与动态查询条件 去 ...
- Content Provider Test过程中遇到的坑
Content Provider(内容提供器) 一.什么是Content Provider? 直接贴官方文档简介图,笔者太懒了,而且 坑 不在这
- Spark算子--distinct
distinct--Transformation类算子 代码示例
- 算法-java代码实现计数排序
计数排序 第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3], ...