一、深浅拷贝

1.浅拷贝,只会拷贝第一层

  1. s = [1, 'ss', '小可爱']
  2. s1 = s.copy()
  3. print(s1)

>>>

[1, 'ss', '小可爱']

  1. s = [1, 'ss', '小可爱']
  2. s1 = s.copy()
  3. s1[0] = 3 #修改s1的值
  4. print(s1)
  1. >>>
  1. [3, 'ss', '小可爱']
  1.  
  1. #浅拷贝,只会拷贝第一层,修改完s1里面列表的值后,数据源也会改变
  2. s = [[1, 2], 'ss', '小可爱']
  3. s1 = s.copy()
  4. s1[0][1] = 3 #修改s1的值
  5. print(s1)
  6. print(s)

>>>

[[1, 3], 'ss', '小可爱']
[[1, 3], 'ss', '小可爱']

2.深拷贝 = 克隆一份

  1. import copy
  2.  
  3. s = [[1, 2], 'ss', '小可爱']
  4.  
  5. s1 = copy.deepcopy(s)
  6. s1[0][1] = 3 #修改s1的值
  7.  
  8. print(s)
  9. print(s1)

>>>

  1. [[1, 2], 'ss', '小可爱']
  2. [[1, 3], 'ss', '小可爱']
  1.  

二、集合:

把不同的元素集合到一起,组成集合的成员不可重复如果有重复的元素保留一个

主要作用:

          1.去重,把一个列表变成集合就自动去重了;

             2.关系测试,交集、并集等关系

集合的创建:

       a = set('xiaoss baby')

       print(a)    # 输出:{'a', 'y', 'b', 'o', 'x', ' ', 'i', 's'}

分类:可变集合、不可变集合

          可变集合(set):可添加和删除元素,非可哈希的,不能做字典的键和其他集合的元素

          不可变集合(frozenset):与上相反

基本操作:

  1. li = ['xiao', 2, 5]
  2. s = set(li)
  3.  
  4. s.add('baby') #添加一个元素
  5. print(s)
  6.  
  7. s.update('ops') # 把要添加的字符串作为一个单独的序列加到集合里
  8. print(s)

>>>

  1. {2, 'xiao', 'baby', 5}
  2. {2, 5, 'o', 'baby', 'p', 'xiao', 's'}
  1.  
  1. li = ['xiao', 2, 5]
  2. s = set(li)
  3.  
  4. s.update('ooo') # 重复的字符只添加一个到集合里
  5. print(s)

>>>

  1. {'o', 2, 'xiao', 5}
  1.  
  1. li = ['xiao', 2, 5]
  2. s = set(li)
  3.  
  4. s.update([12, 'baby']) # 添加多个元素要放到一个容器里
  5. print(s)

>>>

  1. {2, 5, 'baby', 12, 'xiao'}
  1.  
  1. #删除操作
  1. li = ['xi', 2, 5]
  2. s = set(li)
  3. # 删除
  4. s.remove(2) # ()里存放要删除的内容
  5. s.pop() # 随机删除一个
  6. s.clear() # 清空
  7. del s # 直接删除整个集合
  8. print(s)

>>>

  1. print(set('qwer') == set('qwereq'))
  2. # True 因为两者形成的集合结果一样,所以等价
  3.  
  4. print(set('qwer') < set('qwerty'))
  5. #True < 表示后者包含前者

>>>

  1. True
  2. True
  1.  
  1. # 联合操作
  2. print(set('qwer') or set('qwerty')) # 取两者共同的
  3. print(set('qwer') and set('qwerty')) # 取两者包含的所有序列元素

>>>

  1. {'w', 'e', 'q', 'r'}
  2. {'w', 'y', 'r', 't', 'e', 'q'}
  1.  
  1. a = set([1, 2, 3, 4, 5])
  2. b = set([3, 4, 5, 6, 7])
  3.  
  4. # intersection() 交集
  5. print(a.intersection(b))
  6. print(a & b) #同上
  7.  
  8. #union 并集
  9. print(a.union(b))
  10. print(a | b) #同上
  11.  
  12. # 差集(互相不在对方里面)
  13. print(a.difference(b)) # 在a不在b 或print(a - b)
  14. print(b.difference(a)) # 在b不在a 或print(b - a)
  15.  
  16. # 反向交集
  17. print(a.symmetric_difference(b))
  18.  
  19. # 父集
  20. print(a.issuperset(b)) # 判断a是否完全包含于b
  21.  
  22. # 子集
  23. print(a.issubset(b))

>>>

  1. {3, 4, 5}
  2. {3, 4, 5}
  3. {1, 2, 3, 4, 5, 6, 7}
  4. {1, 2, 3, 4, 5, 6, 7}
  5. {1, 2}
  6. {6, 7}
  7. {1, 2, 6, 7}
  8. False
  9. False

python 深浅拷贝&集合的更多相关文章

  1. 小学生都能学会的python(深浅拷贝)

    小学生都能学会的python(深浅拷贝) join() 把列表中的每一项用字符串拼接起来 # lst = ["汪峰", "吴君如", "李嘉欣&quo ...

  2. Python开发【第二章】:Python深浅拷贝剖析

    Python深浅拷贝剖析 Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 ...

  3. 【0806 | Day 9】三张图带你了解数据类型分类和Python深浅拷贝

    一.数据类型分类 二.Python深浅拷贝

  4. 底层剖析Python深浅拷贝

    底层剖析Python深浅拷贝 拷贝的用途 拷贝就是copy,目的在于复制出一份一模一样的数据.使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不 ...

  5. python 小数据池 深浅拷贝 集合

    1.小数据池: 1.1代码块: 一个文件,一个函数,一个类,一个模块,终端中每一行 1.1.1 数字: -5 ~ 256 1.1.2 字符串: 乘法时总长度不能超过20 1.1.3 布尔值: 内容相同 ...

  6. python 深浅拷贝 元组 字典 集合操作

    深浅拷贝 :值拷贝 :ls = [,,] res = ls 则print(res)就是[,,] 浅拷贝 :ls.copy() 深拷贝:ls3 = deepcopy(ls) # 新开辟列表空间,ls列表 ...

  7. python深浅拷贝与赋值

    初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...

  8. 深浅拷贝 集合(定义,方法) 函数(定义,参数,return,作用域) 初识

    深浅拷贝 在python中浅拷贝 a=[1,2,3,4,]b=a.copy()b[0]='3333'print(a) #[1, 2, 3, 4] 浅拷贝一层并不会对a造成变化print(b) #[33 ...

  9. 关于python深浅拷贝的个人浅见

    起初,关于python的深浅拷贝,总是习惯去用传值传址的方式去考虑,发现总是get不到规律,容易记混. python有着高度自治的内存管理,而不可变对象的内存分配,则是能省则省,就是说,无论用什么拷贝 ...

随机推荐

  1. 在myeclipse中maven遇见的问题

    An internal error occurred during: "Retrieving archetypes:". Java heap space 表示你的myeclipse ...

  2. 2017 JUST Programming Contest 3.0 E. The Architect Omar

    E. The Architect Omar time limit per test 1.0 s memory limit per test 256 MB input standard input ou ...

  3. 图论/位运算 Codeforces Round #285 (Div. 2) C. Misha and Forest

    题目传送门 /* 题意:给出无向无环图,每一个点的度数和相邻点的异或和(a^b^c^....) 图论/位运算:其实这题很简单.类似拓扑排序,先把度数为1的先入对,每一次少一个度数 关键在于更新异或和, ...

  4. Android偏好设置(3)启动偏好设置后显示的界面PreferenceActivity和PreferenceFragment

    Creating a Preference Activity To display your settings in an activity, extend the PreferenceActivit ...

  5. mysqlshow(数据库对象查看工具)

    mysqlshow是mysql客户端对象查看工具,可以用来查看数据库.数据库中的表.表中的列.索引等. 1.mysqlshow命令的语法 shell > mysqlshow [options] ...

  6. APP增量更新

    增量更新的概念: 当我们手机上安装的app版本与服务器的最新版本不一致的时候,传统做法是重新下载安装一个最新版的apk文件,不过这种方式比较耗流量,不利于用户体验.增量更新就是只下载当前app版本与最 ...

  7. 1272 最大距离 只想到了dp

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1272 离散化后,用dp[i]表示向右,大于等于i这个数字的最大位置 dp ...

  8. HBase简介(很好的梳理资料) 转

    一. 简介 history started by chad walters and jim 2006.11 G release paper on BigTable 2007.2 inital HBas ...

  9. rhel7安装oracle 11gR2,所需的依赖包

    binutils-2.23.52.0.1-30.el7.x86_64 compat-libstdc++-33-3.2.3-61.x86_64compat-libstdc++-33-3.2.3-61.i ...

  10. AJPFX分析int 和integer的区别

    int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可 ...