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

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. isdigit函数

    isdigit是计算机应用C语言中的一个函数,主要用于检查参数c是否为阿拉伯数字0到9. 相关函数 isdigit 表头文件 #include <ctype.h>(C语言),#includ ...

  2. 我的第五个网页制作:pre、html转义、abbr标签的使用

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. UVA11039-Building designing

    Building designing Time limit: 3.000 seconds An architect wants to design a very high building. The ...

  4. Vijos P1035 贪婪的送礼者【模拟】

    贪婪的送礼者 描述 对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少. 在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人. 然而,在任何一群朋 ...

  5. Gym100814B Gym100814F Gym100814I(异或) ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology

    今日份的训练题解,今天写出来的题没有昨天多,可能是因为有些事吧... Gym100814B 这个题就是老师改卷子,忘带标准答案了,但是他改了一部分卷子,并且确定自己改的卷子没出错,他想从改过的卷子里把 ...

  6. linux下各文件夹的结构说明及用途介绍

    linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令.   /dev:设备特殊文件.   /etc:系统管理和配置文件.   /etc/rc.d:启动的配 置文件和脚本.   /ho ...

  7. 使用Eclipse在Excel中找出两张表中相同证件号而姓名或工号却出现不同的的项

    1:首先把Excel中的文本复制到txt中,复制如下: A表: 证件号                           工号  姓名 310110xxxx220130004 101 傅家宜3101 ...

  8. java如何获取一个对象的大小

    When---什么时候需要知道对象的内存大小 在内存足够用的情况下我们是不需要考虑java中一个对象所占内存大小的.但当一个系统的内存有限,或者某块程序代码允许使用的内存大小有限制,又或者设计一个缓存 ...

  9. Web前端:如何实现选择select下拉框选中跳转其他页面

    <select onchange="window.location=this.value;"><option value="a.html"&g ...

  10. Solr学习笔记1(V7.2)

    下载压缩包http://archive.apache.org/dist/lucene/,解压后放到某一盘符下面 Windows下启动命令 :\solr-7.2.0>bin\solr.cmd st ...