拷贝内存管理和socket
一、拷贝
from copy
import copy
, deepcopy
class Dog:
def __init__(self
, name
, color
='黑色'):
self
.name
= name
self
.color
= color
class Person:
def __init__(self
, name
, age
=0, gender
='女'):
self
.name
= name
self
.age
= age
self
.gender
= gender
self
.dog
= None
def __repr__(self
):
return f
'<{str(self.__dict__)[1:-1]}, id:{id(self)}>'
p1
= Person
('小明')
print(p1
)
1.直接赋值
p2
= p1
print(p2
)
p2
.name
= '小花'
print(p2
)
print(p1
)
2.拷贝
不管怎么拷贝,都是复制原数据产生一个新的数据并且将新数据的地址返回
p1
= Person
('小明')
print('p1:', p1
)
p3
= copy
(p1
)
p4
= deepcopy
(p1
)
print('p3:', p3
)
print('p4:', p4
)
3.浅拷贝和深拷贝的区别
print('=================浅拷贝=================')
p1
= Person
('Tom', 18, '男')
p1
.dog
= Dog
('大黄', '黄色')
print('p1:', p1
)
p2
= copy
(p1
)
print('p2:', p2
)
p2
.dog
.color
= '绿色'
print(p1
.dog
.color
)
print('================深拷贝====================')
p1
= Person
('Tom', 18, '男')
p1
.dog
= Dog
('大黄', '黄色')
print('p1:', p1
)
p2
= deepcopy
(p1
)
print('p2:', p2
)
p2
.dog
.color
= '绿色'
print(p1
.dog
.color
)
二、内存管理
1.内存管理:
python内存管理是自动化(指的是对堆上的内存进行管理)
2.内存的开辟
"""
只要需要保存数据的时候系统就会自动在堆上开辟内存空间保存数据。
注意:如果需要被保存的数据是数字或者字符串,系统会先检查专门保存数字字符串的的缓存区中是否已经存在这个数据,如果存在直接返回之前的数据的地址,不存在才会开辟新的内存去保存。(短小数字和字符串)
"""
str1
= 'abc'
list1
= ['abc', 10, 20]
print(id(str1
), id(list1
[0]))
list2
= []
list3
= []
print(id(list2
), id(list3
))
num1
= -6
num2
= -6
print(id(-6), id(-6))
3.内存的释放(垃圾回收)
"""
Python中的每一个数据都有一个属性用来保存这个数据的引用个数(引用计数),当引用计数的值为0,那么这个数据就会自动销毁
"""
class Person:
pass
Person
()
三、server
1.socket
"""
socket又叫套接字(实现通信的两个端(程序)就是套接字)
套接字有两种:服务器套接字(server)、客户端套接字(client)
"""
2.服务器套接字
from socket
import socket
"""
socket(family=AF_INET, type=SOCK_STREAM) - 创建一个套接字对象
family - IP的类型(ipv4, ipv6);
AF_INET == ipv4 (默认的)
AF_INET6 == ipv6
type - 传输类型(TCP、UDP)
SOCK_STREAM == TCP
SOCK_DGRAM == UDP
"""
server
= socket
()
"""
套接字对象.bind((ip地址,端口))
ip地址 - 找到到服务器对应的计算机;字符串
端口 - 区分计算机中不同的服务(服务指的是正在运行的程序); 整数,范围是0~65535(其中0~1023属于著名端口)
"""
server
.bind
(('10.7.184.61', 8082))
"""
服务器套接字对象.listen(数量) - 数量决定了同一时间的最大通信数(能处理的客服端最大数量)
"""
server
.listen
(512)
while True:
print('等待电话...')
connect
, address
= server
.accept
()
print('通话...')
re_data
= connect
.recv
(1024)
print(f
'接受数据:{address[0]}')
print(str(re_data
, encoding
='utf-8'))
connect
.send
('吃了!'.encode
())
四、client
1.创建套接字
from socket
import socket
client
= socket
()
2.连接服务器
from socket
import socket
client
.connect
(('10.7.184.61', 8082))
while True:
client
.connect
(('10.7.184.61', 8082))
while True:
client
.connect
(('10.7.184.61', 8082))
while True:
message
= input('>>>:')
client
.send
(message
.encode
(encoding
='utf-8'))
re_data
= client
.recv
(1024)
print(re_data
.decode
(encoding
='utf-8'))
五、server持续通信
from socket
import socket
server
= socket
()
server
.bind
(('10.7.184.61', 8082))
server
.listen
(512)
while True:
print('等待...')
connect
, address
= server
.accept
()
while True:
re_data
= connect
.recv
(1024)
print(f
'{address[0]}:{re_data.decode()}')
if re_data
.decode
() == '拜拜':
break
message
= input('>>>')
connect
.send
(message
.encode
())
if message
== '拜拜':
break
转载请注明原文地址:https://ipadbbs.8miu.com/read-50911.html