一、循环列表,删除其中的元素

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深拷贝、浅拷贝的更多相关文章

  1. c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参

    c# 通用类型系统 及变量在 深拷贝 浅拷贝 函数传参 中的深层次的表现 在编程中遇到了一些想不到的异常,跟踪发现,自己对于c#变量在内存上的表现理解有偏差,系统的学习并通过代码实验梳理了各种情况下, ...

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

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

  3. JavaScript之深拷贝&浅拷贝

    深拷贝&浅拷贝,说起来都明白,但是说不出所以然.今天就系统的整理下思绪,一点点的将其分析出所以然 废话不多说 浅拷贝 简单的说就是一个值引用,学生时代接触过编程的人都应该了解过指针,浅拷贝可以 ...

  4. 【opencv】imread 赋值 深拷贝浅拷贝

    import cv2 import copy import os def filter_srcimg(dstimg): ss=3 srcimg=copy.deepcopy(dstimg) #aa=5 ...

  5. Java基础 深拷贝浅拷贝

    Java基础 深拷贝浅拷贝 非基本数据类型 需要new新空间 class Student implements Cloneable{ private int id; private String na ...

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

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

  7. JS Object Deep Copy & 深拷贝 & 浅拷贝

    JS Object Deep Copy & 深拷贝 & 浅拷贝 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...

  8. Map拷贝 关于对象深拷贝 浅拷贝的问题

    问题:map拷贝时发现数据会变化. 高能预警,你看到的下面的栗子是不正确的,后面有正确的一种办法,如果需要看的话的,请看到底,感谢各同学的提醒,已做更正,一定要看到最后      先看例子:     ...

  9. clone 深拷贝 浅拷贝

    1. 定义:知道一个对象,但不知道类,想要得到该对象相同的一个副本,在修改该对象的属性时,副本属性不修改,clone的是对象的属性 2. 意义:当一个对象里很多属性,想要得到一个相同的对象,还有set ...

随机推荐

  1. b9934107349625014ec251e1333d73a8 这个代码是mad5值

    Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.Rives ...

  2. HDU 1754 I Hate It(线段树之单点更新,区间最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. exit(0)与exit(1),return三者区别(详解)

    exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: return():返回函数,若在主函数中,则会退出函数并返回一值. 详细说: 1. return返回函数值,是关键字 ...

  4. 2017ccpc哈尔滨区域赛H

    n堆石子 每次只能拿一个石子从一堆移到另一堆  知道所有的堆的石子数目都能整除x(x>1) 问最小移动次数 枚举x的可能取值  即a[i]和的素因子即可  合因子的区间变化会比较大   然后求余 ...

  5. Java大数应用

    1.大数加法 import java.math.BigInteger; import java.util.Scanner; public class Main { public static void ...

  6. c++(堆排序)

    堆排序是另外一种常用的递归排序.因为堆排序有着优秀的排序性能,所以在软件设计中也经常使用.堆排序有着属于自己的特殊性质,和二叉平衡树基本是一致的.打一个比方说,处于大堆中的每一个数据都必须满足这样一个 ...

  7. 为了解决linux配置Nginx 只能关闭防火墙才能访问的问题

    使用Nginx和iptables做访问权限控制(IP和MAC)     之前配置的服务器,相当于对整个内网都是公开的,而且,除了可以通过80端口的nginx来间接访问各项服务,也可以绕过nginx,直 ...

  8. Python3 的序列

    序列 1.根据列表.元组.字符串的共同点把它们统称为序列(他们都是兄弟呀) 1)都可以通过索引来的到每一个元素 2)默认索引值都是从零开始(Python也支持负数索引) 3)都可以通过分片(切片)的方 ...

  9. Spring测试框架JUnit4.4 还蛮详细的

    TestContext 可以运行在 JUnit 3.8.JUnit 4.4.TestNG 等测试框架下. Spring的版本2.5+JUnit4.4+log4j1.2.12 @RunWith(Spri ...

  10. VIM 自定义语法高亮配置

    VIM 没有自动支持语法高亮,自己动手搞一搞,网上查了一堆资料,终于配置成功, 记录一下,以便后期查看. 总共两步: step1 : 定义语法规则 1)需要创建一个定义语法规则的文件,这个 actio ...