使用dictionary类作为python的开关大小写安全吗?

2024-10-01 02:39:35 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我的程序正在循环切换case的Dictionary类,是否会导致内存问题?纠正我的错误,当我调用dictionary(x)返回值时,python将填充整个新dictionary类对象?你知道吗

编辑: 我创建了这样一个函数,里面有更多的数据。你知道吗

def switch(tcpData):
    return{
    'functionA':fnA
    'functionB':fnB
    'functionC':fnC
    }.get((tcpData.split(" "))[0].rstrip(), "Invalid")

下面是我简化的tcp服务器代码

...
...
    client_sock, address = server.accept()
    print 'Accepted connection from {}:{}'.format(address[0], address[1])
    connected=True
    while connected:
        data = client_socket.recv(1024)
        if not data:
            connected=False
        if "\r" in data:
            print switch(data)
            conn.sendall(switch(data)+"\n\r")
...
...

如前所述,无论何时调用switch函数,python都将填充整个新的dictionary类对象。 假设我的交换字典包含很多数据,我以10Hz或20Hz的速率接收tcp数据,过一段时间它会消耗掉所有的RAM内存吗?你知道吗


Tags: 数据对象函数内存程序clientdatadictionary
1条回答
网友
1楼 · 发布于 2024-10-01 02:39:35

是的,例如,如果您离开然后重新进入该范围,字典将被重新创建

def switch(a):
    responses = {1: 'a',
                 2: 'b',
                 3: 'c'}
    print(id(responses))
    return responses[a]

注意,responsesid一直在变化,这说明每次都创建了一个新对象

>>> switch(1)
56143240
'a'
>>> switch(2)
56143112
'b'
>>> switch(3)
56554184
'c'

相关问题 更多 >