1.深浅拷贝
2.字典的扩展
3.集合
4.函数
字符串相当于字符数组
print(sys.getrefcount(c)) 可以获得这个变量的被引用的次数
深复制可使用copy模块中的deepcopy()实现
深拷贝
d拷贝了a对象及对象里面的数据,修改a不会影响d,修改a里面的子数据也不会影响d
浅拷贝
copy.copy()
修改对象c,不会影响到对象a,也不会影响到对象c
修改对象a,不会影响到对象c,但是会影响到对象b
修改对象b,不会影响到对象c,但是会影响到对象a
一.set集合
是一个无序且不重复的可hash的元素集合
不支持索引,元素获取操作 切片
必须赋予一个可迭代对象
应用于爬虫
1.访问速度快
2.解决重复的问题
<wiz_code_mirror>
s1 = set([1,2,3])
s2 = set([2,3,4])
s3 = set("xyz")
s1.update(s3)
s3.pop()
print (s1)
print(s1 & s2) #直接运算调用运算符
print(s1.intersection(s2))#调用内置应用
print(s1.symmetric_difference(s2))
print(s1|s2)
print(s3)
输出
{1, 2, 3, 'z', 'y'}
{2, 3}
{2, 3}
{1, 4}
{1, 2, 3, 4}
{'z', 'y'}
#add 在集合中添加一个元素,如果重复,只会显示一个元素,避免添加字符串时,集合将字符串分割,我们可以用add来添加元素。
s1 = set()
s1.add('zzn')
print(s1)
s1.add('zzn')
print(s1)
输出:
{'zzn'} {'zzn'}
#clear 清空集合中的元素
s1.clear()
print(s1)
输出:
set()
#difference 比对两个集合,把没有重复的元素摘出来,生成一个新的集合
s2 = set (['zzz','zzz','edsg','ff'])
print (s2)
s3 = s2.difference(['zzz','ff'])
print(s3)
输出:
{'edsg'}
#difference_update 比对两个集合,删除当前集合中所有的包含在参数集合里的元素
s2 = set (['zzz','zzz','edsg','ff'])
s4 = s2.difference_update(['zzz','ff'])
print (s2)
print (s4)
输出:
{'edsg'} None
#intersection 取交集 创建一个新的集合
#pop 随机取出一个元素,可以赋值变量
s2 = set (['zzz','zzz','edsg','ff'])
ret = s2.pop()
print (s2)
输出:
{'edsg', 'ff'}
{‘zzz’}
#remove 移除一个元素,可以指定
s2.remove('ff')
print(s2)
输出:
{'zzz','edsg'}
#symmetric_difference 比对两个集合,所有不重复的元素生成一个新的集合
s1 = set([11,22,33])
s2 = set([22,44])
ret1 = s1.difference(s2)
ret2 = s1.symmetric_difference(s2)
print (ret1)
print (ret2)
输出:
{33, 11} {33, 11, 44}
二.计数器(counter)
是的字典的补充,追逐值出现的次数
1.#counter
使用需要import collections 把每个元素出现的次数进行统计
test = collections.Counter('addsfjklsdjflkjslkfj378876')
print (test)
输出:
Counter({'j': 4, 'd': 3, 'l': 3, 's': 3, 'f': 3, 'k': 3, '7': 2, '8': 2, 'a': 1, '3': 1, '6': 1})
2.#most_common() 拿到前四个最多的值
import collections test = collections.Counter('addsfjklsdjflkjslkfj378876') print (test) ret = test.most_common(4) print (ret)
输出:
Counter({'j': 4, 'f': 3, 'l': 3, 'k': 3, 'd': 3, 's': 3, '7': 2, '8': 2, '3': 1, '6': 1, 'a': 1}) [('j', 4), ('f', 3), ('l', 3), ('k', 3)]
3.#elements 可把里面的所有的值取出来
import collections
test = collections.Counter('addsfjklsdjflkjslkfj378876')
for n in test.elements():
print (n)
6 s s s f f f d d d k k
。。。。
4.#uptate 更新
import collections test = collections.Counter([22,23,12]) test.update(['2','3','444'])
print (test)
输出:
Counter({'3': 1, 22: 1, 23: 1, '2': 1, 12: 1, '444': 1})
5.#subtract 没有出现过的 -1表示
import collections test = collections.Counter([22,23,12])
test.subtract(['dd','dee',23]) print (test)
输出:
Counter({12: 1, 22: 1, 23: 0, 'dee': -1, 'dd': -1})
三.有序字典 orderedDict
也是字典的补充,记住了元素添加的顺序
import collections dic = collections.OrderedDict() dic['ee'] = 'rt' dic['ss'] = 'ed' dic['sx'] = 'vf' print (dic)
输出:
OrderedDict([('ee', 'rt'), ('ss', 'ed'), ('sx', 'vf')])
#move_to_end 把指定的值拿到最后
import collections
dic = collections.OrderedDict()
dic['ee'] = 'rt'
dic['ss'] = 'ed'
dic['sx'] = 'vf'
dic.move_to_end('ee')
print (dic)
输出:
OrderedDict([('ss', 'ed'), ('sx', 'vf'), ('ee', 'rt')])
#pop 指定拿去对应的值
dic.pop('ss')
print (dic)
输出:
OrderedDict([('ee', 'rt'), ('sx', 'vf')])
#popitem 按顺序拿取对应的值从最后开始拿
dic.popitem()
print (dic)
输出:
OrderedDict([('ee', 'rt'), ('ss', 'ed')])
#setdefault 设置默认值 默认添加到最后
dic.setdefault('k4','er') print (dic)
输出:
OrderedDict([('ee', 'rt'), ('ss', 'ed'), ('sx', 'vf'), ('k4', 'er')])
#update 把两个字典合成新的字典
dic.update({'k1':'v1','k2':'v2'})
print (dic)
输出:
OrderedDict([('ee', 'rt'), ('ss', 'ed'), ('sx', 'vf'), ('k2', 'v2'), ('k1', 'v1')])
四.默认字典defaultdict
import collections
dic = collections.defaultdict(list)
dic['k1'].append('zzn')
print (dic)
输出:
defaultdict(<class 'list'>, {'k1': ['zzn']})
五.可命名元祖
根据nametuple可以创建一个包含tuple 所有功能及其他功能的类型
import collections
my_clss = collections.namedtuple('clss',['x','e','w'])
obj = my_clss(11,22,33)
print (obj.x)
print (obj.e)
print (obj.w)
输出:
11 22 33
如果括号中只有字符或数字没有逗号,就不是元组,
(2)这不是元组
(2,)这是元组
六.双向队列 单向队列
1.双向队列 deque
import collections
d = collections.deque()
d.append('d')
d.appendleft('d1')
d.appendleft('xd')
print (d)
r = d.count('d')
print(r)
输出:
deque(['xd', 'd1', 'd1']) 2.extend 扩展多个元素放进去
d.extend(['tt','ee','dd'])
print (d)
输出:
d.extend(['tt','ee','dd'])
print (d)
#index 取这个元素的位置
#insert 插入
#pop 默认从右取
#rotate 把左边的放到右边
d.rotate(4)
print(d)
输出:
deque(['xd', 'd1', 'd1', 'tt', 'ee', 'dd']) deque(['d1', 'tt', 'ee', 'dd', 'xd', 'd1'])
单向队列 import queue
import queue
q = queue.Queue()
q.put('123')
q.put('344')
print (q.qsize())
print (q.get())
输出:
2 123
json 模块
import json s = input('') c = json.loads(s) print (c) print (type(c))
{"ss":12,"op":45} #必须用双引号
输出结果:
{'ss': 12, 'op': 45} <class 'dict'>
[11,22,22]
<class 'list'>
r+ 是可读可写可追加的
w+ 是可写可读的
a+ 是可读写的可追加
<wiz_code_mirror>
with open(Dir+"\test.txt","a+",encoding="utf-8") as f:
print(f.read())
with open(Dir+"\test.txt","a+",encoding="utf-8") as f,
open(Dir+"\test1.txt","a+",encoding="utf-8") as f1:
print(f.read(),f1.read())
作业:
1、ha.py global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 info defaults log global mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms option dontlognull listen stats :8888 stats enable stats uri /admin stats auth admin:1234 frontend oldboy.org bind 0.0.0.0:80 option httplog option httpclose option forwardfor log global acl www hdr_reg(host) -i www.oldboy.org use_backend www.oldboy.org if www backend test.oldboy.org server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000 server 100.1.7.999 100.1.7.999 weight 20 maxconn 3000 backend buy.oldboy.org server 100.1.7.90 100.1.7.90 weight 20 maxconn 3000 {"backend": "test.oldboy.org", "record":{ "server": "100.1.7.999", "weight": 20, "maxconn": 30 } } 2、写程序 用户输入 ‘{"backend": "test.oldboy.org","record":{"server": "100.1.7.999","weight": 20,"maxconn": 30}}’ 字符串格式化,、 test.oldboy.org server 100.1.7.999 100.1.7.999 weight 20 maxconn 3000