python3 set集合,三元运算以及深浅拷贝

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

集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。但是因为集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值。

set和dict一样,只是没有value,相当于dict的key集合,由于dict的key是不重复的,且key是不可变对象因此set也有如下特性:

1)不重复

2)元素为不可变对象

#!/usr/bin/env python
# -*- coding:utf-8 -*-
a={11,22,33,24,8}
b={24,50,88,8}
c={24,8}
print(a)
#增加新的元素
a.add(35)
print(a)
#清空集合
a.clear()
#找a中存在,b中不存在的集合,并将其赋值给新变量c
c=a.difference(b)
print (c)
# 找a中存在,b中不存在的集合,并更新自己
a.difference_update(b)
print(a)
#discard移除元素,不存在的元素不报错
a.discard(11)
#remove移除元素,不存在的元素报错
a.remove(11)
#pop随机移除集合中的某个元素
a.pop()
print(a)
#两个集合的交集,intersection是将交集赋予给新的变量ret,intersection_update是取交集并更新自己
ret=a.intersection(b)
a.intersection_update(b)
print (ret)
print(a)
#判断c和a是否不存在交集(有交集False,无交集True)
print(c.isdisjoint(a))
#判断c是否是a的子集
print(c.issubset(a))
#判断c是否是a的父集
print(c.issuperset(a))
#合并集合a和b,得到的值覆盖a
a.update(b)
print(a)
#增加迭代
a.update([1,2,3])
print(a)
#合并不同项,并复制给新变量d
d=a.symmetric_difference(b)
print(d)
#合并不同项,并更新自己
a.symmetric_difference_update(b)
print(a)




2.三元运算(为真时的结果 if 判定条件 else 为假时的结果)
#说明,if判断条件为真时,name='kobe',否则name='byrant'
name='kobe' if 2>3 else "byrant"
print(name)


3.赋值,深浅拷贝定义
  • 直接赋值:其实就是对象的引用(别名)。

  • 浅拷贝(copy):拷贝父对象,不会拷贝对象内部的子对象。

  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。



#数字和字符串的赋值和深浅拷贝之后,内存地址都一样

 

1 import copy
2 n1='kobe'
3 n2=n1
4 print(id(n1))
5 print(id(n2))
6 n3=copy.copy(n1)
7 print(id(n3))
8 n4=copy.deepcopy(n1)
9 print(id(n4))

 



#列表,字典赋值之后内存地址一样,深浅拷贝之后,内存地址不一样
import copy
l1=['kobe',{'k1':8,"k2":24},10]
print(l1,id(l1))
l2=l1
print(l2,id(l2))
l3=copy.copy(l1)
print(l3,id(l3))
l4=copy.deepcopy(l1)
print(l4,id(l4))

#例子:

alist=[1,2,3,["a","b"]]
import copy
a=alist
c=copy.copy(alist)
d=copy.deepcopy(alist)
print (alist) #[1, 2, 3, ['a', 'b']]
print(a) #[1, 2, 3, ['a', 'b']]
print (c) #[1, 2, 3, ['a', 'b']]
print(d) #[1, 2, 3, ['a', 'b']]
alist.append(8) #列表中增加一个元素
print (alist) #[1, 2, 3, ['a', 'b'], 8]
print(a) #赋值:[1, 2, 3, ['a', 'b'], 8] 也随着增加了元素
print (c) #浅拷贝:[1, 2, 3, ['a', 'b']] 没有拷贝增加的元素
print(d) #深拷贝:[1, 2, 3, ['a', 'b']] 没变
alist[3].append("c") #列表中第三个元素中再追加一个元素
print(alist) #[1, 2, 3, ['a', 'b', 'c'], 8]
print(a) #[1, 2, 3, ['a', 'b', 'c'], 8] 也随着增加了元素
print(c) #浅拷贝:[1, 2, 3, ['a', 'b', 'c']] 里面子对象中增加了一个元素
print(d) #深拷贝:[1, 2, 3, ['a', 'b']] 没变

#结论:
# 赋值:随着原始数据的改变而改变.
# 浅拷贝:只拷贝第一层的父对象,不拷贝子对象,原始数据的子对象中的元素改变,浅拷贝里子对象的元素也会改变.
# 深拷贝:原始对象的改变不会造成深拷贝里任何子元素的改变.
 
posted @ 2018-05-02 17:32  Calvin_zhang  阅读(412)  评论(0编辑  收藏  举报