python--深浅拷贝 join() 列表和字典的删除 fromkeys建立字典
北京的冬天雾霾依旧很重,依稀记得人生初见雾霾时的样子,那时的回忆也是有些尴尬,不过雾霾也伴随了我的成长,成为了我肺泡中不可分割的一部分.
今天我想写的是拷贝的问题,不过在这之前我想先补充一点关于字符串的东西
1.字符串的拼接
lst = ["", "", "", ""]
使用前面的字符串. 对后面的列表进行拼接,拼接的结果是一个字符串
s = "_".join(lst)
print(s)
最后的结果是 1_2_3_4
这个join()就是用迭代的方法对数据进行拼接 for i in lst:
print(i,end = " ")
这样输出的结果就成了 1 2 3 4 就不用换行了 因为end 默认为\n
2.列表,字典的删除
删除列表的方法(简单方法):
li = ["a", "b", "c", "d"]
for i in li[:]:
li.remove(i)
print(li) # 列表切片会产生一个新对象,这样就可以删除列表了
例:
dic = {"张无忌":"乾坤大挪移", "周芷若":"哭", "赵敏":"卖萌"}
for k in dic:
dic.pop(k) # dictionary changed size during iteration
dic["灭绝师太"] = "倚天屠龙剑" # dictionary changed size during iteration 这样的方法是绝对删除不干净的 ,绝对不要用这种方式删除
列表字典不能迭代删除的例子
要想删除列表, 字典这样的类型.应该把要删除的元素放在另一个列表当中,通过迭代新列表,来删除旧列表中的内容
把要删除的key保存在一个新列表中
# 循环这个类表.删除字典中的key:value
lst = []
for k in dic:
lst.append(k) # 循环列表
# 删除字典中的内容
for el in lst:
dic.pop(el)
print(dic)
3.深浅拷贝
- 浅拷贝只拷贝第一层的内容,第二层的内容不会拷贝
- 深度拷贝会拷贝所有内容 ,把元素的全部内容进行拷贝不会产生一个改变,另外一个也跟着改变的问题
深拷贝: copy.deepcopy()
# 引入一个模块
import copy lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]]
lst2 = copy.deepcopy(lst1) # 深拷贝: 对象内部的所有内容都要复制一份. 深度克隆(clone). 原型模式 print(id(lst1))
print(id(lst2)) print(lst1)
print(lst2) lst1[4].append("葫芦娃")
print(lst1)
print(lst2)
浅拷贝: .copy()
从上到下只有一个列表被创建
lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"]
lst2 = lst1
# 并没有产生新对象. 只是一个指向(内存地址)的赋值
print(id(lst1))
print(id(lst2))
lst1.append("葫芦娃")
print(lst1)
print(lst2) lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"]
lst2 = lst1.copy() # 拷贝, 抄作业, 可以帮我们创建新的对象,和原来长的一模一样, 浅拷贝
print(id(lst1))
print(id(lst2))
lst1.append("葫芦娃")
print(lst1)
print(lst2) lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]]
lst2 = lst1.copy() # 浅拷贝. 只拷贝第一层内容
print(id(lst1))
print(id(lst2))
print(lst1)
print(lst2)
lst1[4].append("葫芦娃")
print(lst1)
print(lst2)
现在我们发现
直接lst1 = lst2时
他们实际上指的是同一个对象, 就是说都指向这个列表的地址, 所以当一个改变的时候
另一个也会改变
4. .fromkeys()用来创建一个字典
坑1: 返回新字典. 和原来的字典没有关系
dic = {}
d = dic.fromkeys("风扇哥", "很困")
print(dic) # {}
print(d) 坑2: 如果value是可变的数据类型,那么其中一个key对应的value执行的更改操作. 其他的也跟着变
d = dict.fromkeys("胡辣汤", [])
print(d) # {'胡': [], '辣': [], '汤': []}
print(id(d['胡']))
print(id(d['辣']))
print(id(d['汤'])) d['胡'].append("河南特色")
print(d) # {'胡': ['河南特色'], '辣': ['河南特色'], '汤': ['河南特色']}
dic = {}
d = dic.fromkeys(["胡辣汤"])
print(d) # {'胡辣汤': None}
python--深浅拷贝 join() 列表和字典的删除 fromkeys建立字典的更多相关文章
- 小学生都能学会的python(深浅拷贝)
小学生都能学会的python(深浅拷贝) join() 把列表中的每一项用字符串拼接起来 # lst = ["汪峰", "吴君如", "李嘉欣&quo ...
- Python开发【第二章】:Python深浅拷贝剖析
Python深浅拷贝剖析 Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 ...
- 底层剖析Python深浅拷贝
底层剖析Python深浅拷贝 拷贝的用途 拷贝就是copy,目的在于复制出一份一模一样的数据.使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不 ...
- 【0806 | Day 9】三张图带你了解数据类型分类和Python深浅拷贝
一.数据类型分类 二.Python深浅拷贝
- 第二天----列表、深浅拷贝、元组、字符串、算数运算、字典、while
列表 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 基本操作: 索引切片追加删除长度切片循环包含 创建.查看列表: 列表中的数字不要加引号,列表的索引从0开始: lis ...
- python 深浅拷贝 元组 字典 集合操作
深浅拷贝 :值拷贝 :ls = [,,] res = ls 则print(res)就是[,,] 浅拷贝 :ls.copy() 深拷贝:ls3 = deepcopy(ls) # 新开辟列表空间,ls列表 ...
- python 深浅拷贝 for循环删除
###########################总结########################### 1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 a='aaaa' ls ...
- python深浅拷贝与赋值
初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...
- python---基础知识回顾(一)(引用计数,深浅拷贝,列表推导式,lambda表达式,命名空间,函数参数逆收集,内置函数,hasattr...)
一:列表和元组(引用计数了解,深浅拷贝了解) 序列:序列是一种数据结构,对其中的元素按顺序进行了编号(从0开始).典型的序列包括了列表,字符串,和元组 列表是可变的(可以进行修改),而元组和字符串是不 ...
随机推荐
- 1.ehcache实现页面整体缓存和页面局部缓存
转自:https://www.cnblogs.com/jianjianyang/p/4933016.html 好长时间没写博客了,真的是没时间啊.ps:其实就是懒!!接下来几篇要写下缓存,这里主要写下 ...
- Swift与OC的相互调用
Swift经过四年的发展已经趋于成熟,是时候学一下了,感谢公司swift大佬的不吝赐教.心有所感记录一下,如有不足欢迎指正批评. 新建swift项目 新建Swift.OC类文件 可在新建OC文件时,建 ...
- 解题报告-1012. Numbers With Repeated Digits
Given a positive integer N, return the number of positive integers less than or equal to N that have ...
- linux / centos 安装SQL Server 2017 设置默认语言与排序规则Chinese_PRC_CI_AS
安装 安装很简单参照官方教程 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sq ...
- ST-LINK驱动的安装
1.下载ST-LINK驱动ST-LINK_USB_V2_1_Driver 双击dpinst_amd64.exe来安装. 成功会显示: 2.进入MDK5里面去配置ST-LINK 通过魔术棒选项: a.D ...
- Android Studio真机测试失败-----''No target device found"
手机成功连接电脑,并且手机已经设置了开发者模式,但是启动真机还是失败,最后发现居然自己没有配置android sdk的环境变量,配置之后 如果还是不能启动,点击android studio上的tool ...
- 网络中的A、B、C类地址
1.A类ip地址(1.0.0.0到126.255.255.255) A类地址只有第一个8位表示网络地址,最高位一定为0,所以A类地址的网络号范围可以为:64+32+16+8+4+2+1=127,也就是 ...
- Chrome Console API 参考
https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference
- Oracle学习笔记(三)
五.操作表 1.表分为行和列 约定:每行数据唯一性,每列数据同类性,每列列名唯一性. 2.数据类型 字符型 -- 固定长度的字符类型 字符类型:CHAR(n)(MAX n=2000).NCHAR(MA ...
- Linux的磁盘分区(一)
磁道:track 扇区:sector 磁头:head 柱面:cylinder 每个扇区,512字节 每个磁道划分为63个扇区 逻辑磁头(盘面)数设为255 一个柱面的大小 =255 * 63 * 51 ...