一. 知识点补充

  1. 列表和字典不能在循环过程中进行增删操作,因为列表索引在循环过程会发生改变,字典规定循环不可改变.

    删除方法: 将需要大量删除的列表或者字典遍历取出要删除的对象,放入一个空列表,之后对列表进行循环遍历,删除原列表或字典.

  2. fromkeys(' a ', ' b ')不会对原来的字典产生影响. 产生新字典(将a迭代变成字典的key, b为每个key的vlaue)

dic = {"a":"123"}
dic.fromkeys("救世主", "暗帝" ) # 返回给你一个新字典
print(dic)
#输出结果: {'a': '123'}
dic = {"a":"123"}
a = dic.fromkeys("救世主", "暗帝" ) # 返回给你一个新字典
print(a)
#输出结果: {'救': '暗帝', '世': '暗帝', '主': '暗帝'}

二. set集合: 是一个无序且不重复的元素集合    

  1. 集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。

      集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。

      但是因为集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值.

  2. 创建空集合时,只能用set(),如果用第二种方法s={},创建的实际上是一个空字典

s = {}
print(type(s))
#输出结果: <class 'dict'>
a=set('boy')
b=set(['y', 'b', 'o','o'])
c=set({"k1":'v1','k2':'v2'})
d={'k1','k2','k2'}
e={('k1', 'k2','k2')}
print(a,type(a))
print(b,type(b))
print(c,type(c))
print(d,type(d))
print(e,type(e))
#执行结果如下:
#{'o', 'b', 'y'} <class 'set'>
#{'o', 'b', 'y'} <class 'set'>
#{'k1', 'k2'} <class 'set'>
#{'k1', 'k2'} <class 'set'>
#{('k1', 'k2', 'k2')} <class 'set'>

  3. 增加   

a=set('python')
a.add('tina')
print(a)
b=set('python')
b.update('tina')
print(b)
#执行结果如下:
#{'tina', 'o', 'p', 'n', 't', 'y', 'h'}
#{'o', 'i', 'p', 'a', 'n', 't', 'y', 'h'}#由以上代码可以看出,add是单个元素的添加,而update是批量的添加。输#出结果是无序的,并非添加到尾部。

  4.删除(remove,discard,pop)

c={'p', 'i', 'h', 'n', 'o', 'y', 't'}
c.remove('p')
print(c)
#输出结果: c={'i', 'h', 'n', 'o', 'y', 't'}
c.discard('p')
print(c)
#输出结果: c={'i', 'h', 'n', 'o', 'y', 't'}
c.pop()
print(c)
#输出结果: 执行结果如下: {'i', 'h', 't', 'o', 'y', 'n'} #当执行c.remove('p','i')和c.discard('p','i')时,报错:TypeError: #remove() takes exactly one argument (2 given),
#说明remove和discard删除元素时都只能一个一个的删,同add对应。#remove,pop和discard的区别:
#discard删除指定元素,当指定元素不存在时,不报错;
#remove删除指定元素,但当指定元素不存在时,报错:KeyError。
#pop删除任意元素,并可将移除的元素赋值给一个变量,不能指定元素移#除。

  5. 清空

c={'p', 'i', 'h', 'n', 'o', 'y', 't'}
c.clear()
print(c)
#执行结果如下:
#set()

三. 深浅拷贝

  1. 赋值

lst1 = ["金毛狮王", "紫衫龙王", "白眉鹰王", "青衣服往"]
lst2 = lst1 # 列表, 进行赋值操作. 实际上是引用内存地址的赋值. 内存中此时只有一个列表. 两个变量指向一个列表
lst2.append("杨左使")  # 对其中的一个进行操作. 两个都跟着变
print(lst2)
print(lst1)
#输出结果: ['金毛狮王', '紫衫龙王', '白眉鹰王', '青衣服往', '杨左使']
#         ['金毛狮王', '紫衫龙王', '白眉鹰王', '青衣服往', '杨左使']        

  2. 浅拷贝

lst1 = ["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王"]
# lst2 = lst1.copy()  # lst2 和lst1 不是一个对象了
lst2 = lst1[:]  # 切片会产生新的对象
lst1.append("杨左使")#对lst1进行添加
print(lst1)#打印列表二者不相同
print(lst2)
print(id(lst1))#打印lst1和lst2的id,二者是不相同的
print(id(lst2))
#输出结果:['金毛狮王', '紫衫龙王', '白眉鹰王', '青翼蝠王', '杨左使']
#        ['金毛狮王', '紫衫龙王', '白眉鹰王', '青翼蝠王']
#        331794792563784
#        1794792563848    

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

  3. 深拷贝

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

  *为什么要有深浅拷贝

  *拷贝比创建对象的过程要快

转载于:https://www.cnblogs.com/dong-/p/9291093.html

python (集合和深浅拷贝)相关推荐

  1. 数据池,集合及深浅拷贝

    数据池,集合及深浅拷贝 小数据池(python中一种提高效率的方式,固定数据类型使用同一个内存地址) 支持str,int,bool id 查看空间的内存地址 获取开辟空间的一种地址 print(id( ...

  2. Python赋值与深浅拷贝

    # coding=utf-8 #Python 赋值 与深浅拷贝 #Python 赋值时会创建一个新的引用,对不可变对象,实际上象创建一个副本,但对可变对象,因为是引用,当对其中一个对象的元素进行操作时 ...

  3. Python之基础数据补充、set集合和深浅拷贝

    基础数据补充 字符串的常用操作         1. join() li = ["李嘉诚", "麻花藤", "⻩海峰", "刘嘉玲 ...

  4. python之set集合、深浅拷贝

    一.基本数据类型补充 1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作: li = ['李嘉诚','何炅','海峰','刘嘉玲']s = "_&qu ...

  5. python里clear和copy_python (集合和深浅拷贝)

    一. 知识点补充 1. 列表和字典不能在循环过程中进行增删操作,因为列表索引在循环过程会发生改变,字典规定循环不可改变. 删除方法: 将需要大量删除的列表或者字典遍历取出要删除的对象,放入一个空列表, ...

  6. 集合、深浅拷贝、文件操作(读、写、追加)函数初识(参数)

    小数据池 #int ==比较数值 is 比较内存地址 id 测试内存地址 #str 不能含有特俗字符 单个元素*数字,不能超过21 i1 = 'a'*20 i = 'a'*20 id一样 i1 = ' ...

  7. 集合(set) 深浅拷贝

    set集合 , 深浅拷⻉以及部分知识点补充 ⼀. 基础数据类型补充 1. join() 加入 split的逆反 把列表转化为字符串 ,也可以遍历字符串 不能是整型 用于转换类型 join 是遍历(迭代 ...

  8. set集合、深浅拷贝以及部分知识点补充

    基础数据类型补充 字符串的拼接 lis = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"]s = " ...

  9. 基本数据类型补充、set集合、深浅拷贝

    基本数据类型的补充 1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作 str.join(可迭代对象): li = ['李嘉诚','何炅','海峰','刘嘉玲' ...

  10. python——赋值与深浅拷贝

    结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一--python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,我们还是要花一点时间来 ...

最新文章

  1. 重磅推荐:中国人工智能趋势报告(完整版)
  2. Android服务二 创建绑定服务
  3. 三万字的java I/O流基础总结看完肯定能把女朋友教会
  4. JavaScript实现clearBit清除位算法(附完整源码)
  5. Boost::context模块fiber的throw测试程序
  6. 你了解 Assembly.Load 吗?
  7. 大数据实效_全流程监督 让大数据督查取得实效
  8. 季节性时间序列数据分析_如何指导时间序列数据的探索性数据分析
  9. JS之获取指定位置Unicode的charCodeAt()方法
  10. MySQL查询select实例 【笔记】
  11. 【Python】Magician“专属”神秘的“读心术”
  12. 神经网络“炼丹炉”内部构造?牛津大学博士小姐姐用论文解读
  13. k 近邻算法解决字体反爬手段|效果非常好
  14. HackerRank,一行代码解决输出问题
  15. 企业架构 - 涉众管理(Stakeholder Management)
  16. 大学生医保的报销范围
  17. 【李宏毅2020 ML/DL】P110-111 Policy Gradient Proximal Policy Optimization
  18. 空间复杂度怎么算_西餐厅主题餐饮空间设计装修预算怎么算?-雨川
  19. DS1302+LCD1602=万年历
  20. 什么是MySQL集群?带你全面掌握MySQL集群原理

热门文章

  1. JS拖动技术--- 关于setCapture (转自 剑胆琴心-.Net学习笔记)
  2. 子页面赋值给父页面的控件方法
  3. 回文数问题,两数互换位置问题(不用第三个变量)
  4. linux下grub的设置密码,grub设置密码
  5. STL标准模版库--vector的操作集合
  6. GC Roots 是什么?哪些对象可以作为 GC Root
  7. 关于计算机的幻想作文600字,科学幻想作文600字
  8. php中绘制长方体,php代码将常见的长方形图片修改为正方形的图片
  9. java 占位符_Java重要知识点
  10. [渝粤教育] 西南科技大学 机床电气控制技术 在线考试复习资料