一. 基础数据类型

1. str. join()

  str. join(元组、列表、字典、字符串)可以把这些都转变成字符串.

a = 'hello'.join('123')
b = '123'.join('hello')
print(a)  #1hello2hello3
print(b)  #h123e123l123l123o
li = ['hello','world','code']
str1 = '*'.join(li)
print(str1)  #hello*world*code

tu = ('welcome','you','are')
str2 = '@'.join(tu)
print(str2)  #welcome@you@are

dic = {'name':'王力宏','job':'singer','age':'42'}
str3 = '_'.join(dic)
print(str3)  #name_job_age

2. list删除

  列表循环时不能不可以进行删除操作.因为删除一个元素后,剩下的索引会发生改变.一开始这个指针指向第0 个. 然后获取到第0个元素. 紧接着删除第0个. 这个时候. 原来是第一个的元素会自动的变成第0个. 然后指针向后移动一次, 指向1元素.  这时原来的1已经变成了0, 也就不会被删除了.

li = ['hello','world','code']
for c in li:li.remove(c)
print(li)  #['world']

li = ['hello','world','code']
for c in li:li.pop()
print(li)  #['hello']

li = ['hello','world','code']
for c in range(len(li)):del li[c]
print(li)  #报错

  用pop可以删除:

li = ['hello','world','code']
for n in range(0,len(li)):li.pop()
print(li)  #[]

  所以想要删除列表中的元素,要另建一个新列表来存储原列表的内容.对新列表进行循环,来删除原列表的元素.

li = ['hello','world','code']
li1 = []
for c in li:li1.append(c)
for el in li1:li.remove(el)
print(li)  #[]

3. 字典增加删除

  字典不能再循环的时候更改大小,所以循环的时候字典不可以增加删除.

dic1 = {"a":"123", "b":"456"}
for k in dic1:dic1.setdefault("c", "123")
print(dic1)  #报错 RuntimeError: dictionary changed size during iteration

dic2 = {"a":"321", "b":"654"}
for k in dic2:dic2.pop(k)
print(dic2)  #报错 #RuntimeError: dictionary changed size during iteration

  对字典循环删除,要先建一个新列表来存储字典的key值,再对列表循环,然后删除字典元素.

dic1 = {"a":"123", "b":"456"}
li = []
for k in dic1:li.append(k)
for el in li:dic1.pop(el)
print(dic1)  #{}

dict中的fromkey(),可以帮我们通过list来创建一个dict

dic = dict.fromkeys("王健林", "思聪" ) # 返回给你一个新字典
print(dic)  #{'王': '思聪', '健': '思聪', '林': '思聪'}

4. 类型转换

元组 => 列表        list(tuple)

列表 => 元组        tuple(list)

list => str     str.join(list)

str => list     str.split()

三. 深浅拷贝

  将一个列表赋值给lst1, 再将lst1赋值给lst2, lst1和late2的内存地址一样,共同指向同一个列表. 对lst2进行增加操作,lst1也会改变

lst1 = ["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王"]
lst2 = lst1 # 列表, 进行赋值操作. 实际上是引用内存地址的赋值. 内存中此时只有一个列表. 两个变量指向一个列表

lst2.append("杨左使")  # 对其中的一个进行操作. 两个都跟着变
print(lst2)  #['金毛狮王', '紫衫龙王', '白眉鹰王', '青翼蝠王', '杨左使']
print(lst1)  #['金毛狮王', '紫衫龙王', '白眉鹰王', '青翼蝠王', '杨左使']

  字典也是一样

dic1 = {1:"金毛狮王", 2:"紫衫龙王",3: "白眉鹰王", 4:"青翼蝠王"}
dic2 = dic1 #  两个变量的内存一样,指向同一个列表. 

dic2.setdefault(5,"杨左使")  # 对其中的一个进行操作. 两个都跟着变
print(dic2)  #{1: '金毛狮王', 2: '紫衫龙王', 3: '白眉鹰王', 4: '青翼蝠王', 5: '杨左使'}
print(dic1)  #{1: '金毛狮王', 2: '紫衫龙王', 3: '白眉鹰王', 4: '青翼蝠王', 5: '杨左使'}

  对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量. 并不是复制一份内容. 所以. lst1(dic1)的内存指向和lst2(dic2)是一样的. lst1(dic1)改变了了, lst2(dic2)也发生了改变.

1. 浅拷贝

  浅拷贝, 只会拷贝第一层. 第二层的内容不会拷贝. 所以被称为浅拷贝.用copy()来进行拷贝.

lst1 = ["赵本山", "刘能", "赵四"]
lst2 = lst1.copy()  # lst2 和lst1 不是一个对象了
# lst2 = lst1[:]  # 也可以用切片,切片会产生新的对象
lst1.append("谢大脚")
print(lst1, lst2)  #['赵本山', '刘能', '赵四', '谢大脚'] ['赵本山', '刘能', '赵四']

2.深拷贝

  浅拷贝只能拷贝第一层,遇到有第二层的列表,无法对第二层进行拷贝.对拷贝后的变量lst1第二层更改,lst1也会改变.

lst1 = ["超人", "七龙珠", "葫芦娃", "山中小猎人", ["金城武", "王力宏", "渣渣辉"]]
lst2 = lst1.copy()  # 拷贝. 浅拷贝 拷贝第一层
lst1[4].append("大阳哥")  #对第二次的列表进行增加操作
print(lst1, lst2)
# ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉', '大阳哥']]
# ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉', '大阳哥']]

   深度拷贝. 把元素内部的元素完全进行拷贝复制. 不会产生一个改变另一个跟着改变的问题.

  语法  import copy

      copy.deepcopy()

import copy
lst1 = ["超人", "七龙珠", "葫芦娃", "山中小猎人", ["金城武", "王力宏", "渣渣辉"]]
lst2 = copy.deepcopy(lst1)  # 把lst1扔进去进行深度拷贝 , 包括内部的所有内容进行拷贝
lst1[4].append("大阳哥")
print(lst1, lst2)
# ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉', '大阳哥']]
# ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉']]

转载于:https://www.cnblogs.com/huangqihui/p/9289930.html

字典和列表的删除问题, 深浅拷贝相关推荐

  1. join,列表和字典用for循环的删除,集合,深浅拷贝

    1.join() 将列表转换成字符串,并且每个字符之间用另一个字符连接起来,join后面必须是可迭代的对象(字符串,列表,元组,字典,集合),数字不能迭代 例如: 1 s = ['a','b','c' ...

  2. 列表的join方法,类方法formkeys,删除,集合,深浅拷贝赋值,冒泡排序

    #列表join方法 lst = ["汪峰", "吴君如", "李嘉欣", "陈慧琳", "关之琳"] ...

  3. set集合, 深浅拷贝, join, 列表和字典在循环中删除元素的问题, fromkeys( , )

    一. set集合 空集合 a = set() set集合内的元素必须可哈希(不可变), int, str, bool, tuple set3 = {'1','alex',2,True,(1,2,[2, ...

  4. 列表、字典补充点、strJoin方法、set()集合、和深浅拷贝

    一 .对之前知识点的补充 str中的join方法,把列表换成字符串 1 s = "_".join("ABC") #可迭代对象 2 print(s) 3 > ...

  5. Learn day3 深浅拷贝/格式化/字符串/列表/字典/集合/文件操作

    1. pass break continue # ### pass break continue # (1) pass 过 """如果代码块当中,什么也不写,用pass来 ...

  6. day02 格式化输出 运算符 编码 字符串 列表 元组 字典 set集合 深浅拷贝

    day02学习大纲 一. 格式化输出: %s 占位字符串 %d 占位数字 "xxx%sx %sxx" % (变量, 变量) 二. 运算符: a+=b a = a + b and 并 ...

  7. python基础知识5——赋值与深浅拷贝——整数和字符串,列表元组字典

    深浅copy 和很多语言一样,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式. 在学习过程中,一开始对浅拷贝理解很模糊.不过经过一系列的实验后,我发现对这三者的概念 ...

  8. Python笔记_07_列表的相关操作_列表相关函数_深浅拷贝_字典相关函数_集合相关函数_冰冻集合

    笔记目录 列表的相关操作 列表的拼接(同元组) 列表的重复 (同元组) 列表的切片 (同元组) 列表的获取 (同元组) 列表的修改 (可切片) 列表的删除 ( 可切片 ) 列表的相关函数 append ...

  9. day2-元组 列表-赋值和深浅拷贝

    一 元组 元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表 用途:一般情况下用于自己写的程序能存下数据,但是又希望这些数据不会被改变,比如:数据库连接信息等 1. ...

最新文章

  1. “一百万行Python代码对任何人都足够了”
  2. git for c#, clone方法
  3. 同软件多个线程设置不同ip_中学校园广播-中学IP网络广播系统解决方案
  4. docker中部署hadoop、zookeeper、hbase伪分布式并上传到阿里云远程仓库
  5. 诗歌rials 之RJS的tips
  6. 解决The total number of locks exceeds the lock table size错误
  7. select默认下拉箭头改变、option样式清除
  8. 多路开关模式的switch语句
  9. PHPCMS修改目录
  10. igzo屏幕优点与缺点_手机贴膜怎么选?选对了可以省个屏幕钱
  11. window下默认的汉字模式——GBK
  12. Python压缩图片到指定大小
  13. GAN 模式崩溃的理论解释
  14. [HTML]北京邮电大学信息与通信工程学院选课参考指南
  15. Markdown文章排版
  16. python语句中print(type(1j))_Python语句 print(type(1/2))的输出结果是:______
  17. 魂动罗java源码_魂斗罗源码(VC版)
  18. 解决 remote: Repository not found. fatal: repository 'https://github.com/xxxx/xxxx.git/
  19. python 中的“_,“有什么用途
  20. 笔耕不辍,学习习惯?兴趣爱好?源于对真知的热爱?

热门文章

  1. 干货!基于元消歧的偏多标记学习
  2. 软件测试之-集成测试
  3. 怎么删除win10的系统更新服务器,教你怎么永久删除Win10更新助手(Update Assistant)...
  4. 共享软件作者怎样才能月入万元(一)
  5. Toy例程导读(三).高级语言分析和转换
  6. 寒门再难出贵子?学会这个方法,跨越阶层不是梦
  7. 统计分析/PCA,PCoA,NMDS等的区别
  8. DataSec数据防泄密系统
  9. Java基础——IO流
  10. Java修行——DAY12