python3.5中的集合常用操作,及浅copy、深copy的区别

41 篇文章 1 订阅
# Author Richard_Kong
# !/usr/bin/env python
# --*-- encoding:utf-8 --*--
'''
集合: 是一个无序的 不重复的数据组合
1、去重 把一个列表变为一个集合 就自动去重了
2、关系测试,测试两组数据之间的交集 补集、差集、并集

由于集合是无序的 不能通过索引或者切片来进行操作 不能打印s2[2]这种索引

主要的作用就是关系测试 交集 并集 补集 差集等
'''
import copy

s1 = set([1,2,3,4,5,6,7])
s2 =set([1,2,2,2,3,7,66,6,21])
s3 = ("hello python")
'''
首先打印这三个集合 看看定义有什么区别
'''
print(s1)
print(s2) # 把集合s2中重复的数据 给去掉了
print(s3)
# 并集
print(s1|s2)
# 交集
print(s1&s2)
# 差集  在s1中 但是不再s2中
print(s1-s2)
#对称差集,元素在s1中 或者s2中 不会同时出现在s1和s2中
print(s1^s2)
# 也是 差集
print(s1.difference(s2))
""" Remove all elements of another set from this set. 删除s1中所有s2的元素 剩余的就是差集并赋值给s1"""
# print(s1.difference_update(s2))
# print(s1)
"""
        Return the intersection of two sets as a new set.

        (i.e. all elements that are in both sets.)
        交集
"""
print(s1.intersection(s2))
""" Report whether another set contains this set. 是否微子集,返回true or false"""
print(s1.issubset(s2))
""" Report whether this set contains another set.是否微父集 """
print(s1.issuperset(s2))
""" Return True if two sets have a null intersection. 是否有交集,有交集返回false 没有返回True"""
print(s1.isdisjoint(s2))
"""
        Return the symmetric difference of two sets as a new set.

        (i.e. all elements that are in exactly one of the sets.)
对称差集 只在其中一个集合中的元素
"""
print(s1.symmetric_difference(s2))

print(s1.copy())
print('''下面对python中赋值进行解析''')
"""
python 中对象的赋值,实际上是对象的引用,当创建一个对象并把它赋值给一个变量的时候,
python并没有拷贝这个对象,而是拷贝了这个对象的引用

这是针对 对象而言的 变量并不是这样
------也就是说 当原对象改变,被赋值的变量也会改变------
"""
alist = [1,2,3,33,44]
b = alist

alist.append(2)
print(alist)
print('浅拷贝b:',b)  # alist 改变了 b 也会改变

a = 10
c = a
a = 31
print('a:',a)
print('c:',c)
"""这就是浅拷贝,没有拷贝子对象,当原始对象改变,子对象会随着改变"""
"""深拷贝,就是对象数据的复制,并不是赋值的引用,而是赋值的对象,当原始对象改变,赋值对象不会改变"""

d = copy.copy(alist)
alist.append(99)
print(alist)
print('可以发现d中没有99元素,深拷贝d:',d)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值