python学习五(基础知识)

python基础学习五


本章内容

  1. 列表深浅拷贝
  2. 集合

1.列表深浅拷贝

浅拷贝:数据半共享,浅拷贝只能拷贝最外层,修改内层则原列表和新列表都会变化,通过列表的内置方法copy就可以实现

s = [1, 'alex', 'alvin']
s2 = s.copy()
print(s2)

拷贝出的列表s2和列表s结果一致:  [1, 'alex', 'alvin']

s = [[1,2], 'alex', 'alvin']
s3 = s.copy()
s3[0][1] = 3
s3[1] = "hzw"
print(s3)
print(s)

结果:
[[1, 3], 'hzw', 'alvin']
[[1, 3], 'alex', 'alvin']

 把列表s3中的元素1修改为'hzw'后,原列表并未受影响

   将s3中第一个元素[1,2]中的2修改为'3'时,原列表中也跟着变了

   原因:浅拷贝,只拷贝第一层,2层以上 都是拷贝元素的地址,参考下图

 

深拷贝:数据完全不共享,是指将原列表完全克隆一份新的,copy.deepcopy()方法来拷贝列表

 

h1 = ['h', 123,[15000,9000]]
x1 = copy.deepcopy(h1)
x1[0] = 'x'
x1[1] = 666
h1[2][1] -= 1999
x1[2][1] -= 5000
print(h1)
print(x1)

结果:

  ['h', 123, [15000, 7001]]
  ['x', 666, [15000, 4000]]

2.集合

集合是无序的,不可重复的数据集合,集合里面的每个元素必须是可哈希的(不可变的数据类型),但是集合是不可哈希的,所以集合做不了字典的键

作用: 1、去重 

            2、关系测试, 交集\差集\并集\反向(对称)差集

集合的创建方式:

1.通过set()创建集合,格式 :集合名字=set(对象)

2.通过{}创建

 

#集合创建
s = set('saaaa li')
s1 = ['alvin', 'ee', 'alvin']
print(s)
s2 = set(s1)
print(s2)

s3 = set([1,2,3,'qqqqq'])
print(s3)

a = set([1,2,3,4,5])
b = set([4,5,6,7,8])
#取交集
print(a.intersection(b))
print(a&b)
#取并集
print(a.union(b))
print(a | b)
#差集
print(a.difference(b))
print(a-b)
print(b.difference(a))
print(b-a)
#反向交集
print(a.symmetric_difference(b))
print(a^b)

#父集,超集
print(a.issuperset(b))
print(a.issubset(b))

 

posted @ 2019-07-06 17:29  hzw2019  阅读(37)  评论(0)    收藏  举报