python中所有的数据类型都是,数据都是对象。
所有的运算符对应的操作,本质都是在调用数据类型对应的魔法方法。(每个运算符都对应一个固定的魔法方法)
1.一个变量直接给另外一个变量赋值:直接将地址赋值,赋完后两个变量指向同一块内存区域,并且相互影响
2.浅拷贝和深拷贝
浅拷贝原理:将被拷贝的对象复制一份,产生一个新的数据,然后将新的数据的地址返回
2.1.浅拷贝
列表或字典的copy方法是浅拷贝、切片也是浅拷贝
copy.copy(对象) - 复制指定的对象,产生一个新的对象
2.2.深拷贝
copy.deepcopy(对象) - 复制指定的对象,产生一个新的对象。如果这个对象中有其他的对象,子对象也会被复制
运算符重载
1.运算符重载
通过在类中实现运算符对应的魔法方法,来让类的对象支持相关运算符的操作
每个运算符对应固定的魔法方法
x + y :前面的对象决定使用运算符的类
补充:重载
函数的重载 - 函数名相同但是参数不同的函数可以有多个,但是python不支持函数的重载
"""python不支持函数的重载"""
def func1():
print('函数1')
def func1(x)
print('函数2', x)
func1()
func1('abc')
memory
1.数据的存储(内存开辟)
python的变量都存储在栈区间,对象都在堆区间。
声明变量或者给变量赋值,是现在内存(堆)中开辟存储数据,然后将地址保存在变量中。
但是数字和字符串特殊,如果是用数字或者字符串给变量赋值,不会直接开辟空间保存数据,而是现在内存检测这个数据之前是否已经存储过,如果已经存储直接用上次保存的数据,没有存储才会开辟新的空间保存数据。
2.内存的释放
2.1.引用计数
python每个对象都有一个属性叫引用计数,用来保存当前对象的引用的个数
2.2.
python中的垃圾回收机制来判断一个对象是否销毁,就看这个对象的引用计数是否为零,如果为零就会被销毁
socket(套接字)
进行通信的两端就是套接字,有两种类型,分别是服务器套接字、客户端套接字
1.创建套接字对象(买个电话机)
family - 设置ip协议类型,AF_INET(ipv4),AF_INET6(ipv6)
type - 设置传输协议类型,SOCK_STREAM(TCP),SOCK_DGRAM(UDP)
server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
2.绑定ip地址和端口(插电话线绑定电话号码)
bind((ip地址,端口))
ip地址 - 字符串,服务器对应的ip地址
端口号 - int,端口号用来区分一台电脑上的不同的服务。0-65535,0-1024是著名端口,一般不选。
同一时间一个端口只能绑定一个服务
server.bind(('10.7.185.70', 8888))
3.开始监听请求(等别人打电话)
server.listen(512)
4.让服务器一直运行
while True:
print('开始接收请求。。。')
5.接收请求(接电话)
# 接收请求(接电话)
# 代码运行到这个位置,会停下来,等到有客户端给服务器发送请求为止
connect, address = server.accept()
6.接收消息(听别人说)
"""
recv(bufsize) - bufsize,设置一次性能够接收的数据大小的最大值,单位是字节
返回的数据类型是字节
"""
re_data = connect.recv(1024)
print(str(re_data))
7.发送数据(说给别人听)
connect.send('你好!'.encode())