day16总结

1.运算符的重载

python中的数据类型都是类,数据都是对象
所有运算符对应的操作,都是在调用数据类型对应的魔法方法(每个运算符都有一个固定的魔法方法)

2.直接赋值,浅拷贝和深拷贝

  1. 直接赋值:把一个变量赋给另外一个变量,实质上是将变量存储的地址赋给另一个变量,两个变量指向同一个数据,互相影响

浅拷贝和深拷贝的基本原理:

开辟一块新的内存区域,来储存被拷贝的数据,将地址保存在新的变量中,两个变量存储不同的地址,互不影响
a.浅拷贝--没有拷贝子对象,原始数据改变,拷贝的数据的子对象会改变
1)字典、列表等的copy()方法,切片等都是浅拷贝
2)copy.copy(对象) -- 复制指定的对象,产生一个新的对象

b.深拷贝-- 拷贝了子对象,原始数据改变,不会改变拷贝的数据的子对象
copy.deepcopy(对象) -- 子对象也会拷贝一份
先检查变量1中的数据1中是否有变量2(其中变量存储的是数据2),如果有,则开辟一个新的内存空间保存数据2的值,并用变量3存储该地址。再开辟一个新的内存空间存储变量1中的除变量2以外的值,以及变量3,并用变量4存储新的内存地址

3.套接字(socket)

进行通信的两端就是套接字:有两种类型,分别是服务器套接字(等待其他链接),客户端套接字(主动连接其他端)

3.1.创建服务器的步骤

1.创建套接字对象(买个电话机)socket(family, type)
2.绑定ip地址和端口(插上电话线,绑定电话号码)bind(ip, port)
3.开始监听请求(按电池,等待别人打电话) listen(num) -- num设置能监听的个数
4.让服务器一直运行(用循环)while True
5.接收请求(接电话) -- 代码运行到这个位置会停下来,直到客户端和服务器发送请求为止 accept() - return client, addr
6.接收客户端的socket对象和地址,并保存下来,后面的发送、接收和结束都是用客户端的socket对象来调用方法
7.接收消息(听别人说,可以循环接收消息和发送消息,实现两人的一直通信)。recv(bufsize) -- bufsize设置一次接收消息的数据大小的最大值,返回的数据类型是字节(二进制)client.recv(bufsize) -- bufsize接收的数据大小
8.发送消息(二进制)client.send()
9.关闭连接client.close()

"""
family -- 设置ip协议,AF_INET(ipv4), AF_INET6(ipv6)
type -- 设置传输协议类型,SOCK_STREAM(TCP), SOCK_DGRAM(UDP)
"""

"""
bind((ip地址,端口))
ip地址 - 字符串,服务器对应的ip地址
端口 - int,端口号用来区分一台电脑上的不同服务. 0 - 65535, 0 - 1024是著名端口。同一时间一个端口只能绑定一个服务
bind方法传入的是一个元祖(ip地址,端口)
"""
"""
recv(bufsize) -- bufsize设置一次性能够接收的数据大小的最大值(接收时间),单位是字节
返回的数据类型是字节
"""

3.2创建客户端的步骤
1.创建套接字对象(客户端)
2.连接服务器 client.connect((ip地址,port))

  1. 发送消息client.send()
    4.接收消息client.recv

你可能感兴趣的:(day16总结)