将
# -*- coding: utf-8 -*-
import random, pprint
user = {}
USERINFO_STRUCT = {
'id': '',
}
def client_new(id):
global user
newuser = USERINFO_STRUCT
newuser['id'] = id
user[id] = newuser
pprint.pprint(user)
print ""
client_new(1)
client_new(2)
client_new(3)
I want results:
{1: {'id': 1}}
{1: {'id': 1}, 2: {'id': 2}}
{1: {'id': 1}, 2: {'id': 2}, 3: {'id': 3}}
代码执行的结果是:
{1: {'id': 1}}
{1: {'id': 2}, 2: {'id': 2}}
{1: {'id': 3}, 2: {'id': 3}, 3: {'id': 3}}
你是怎么做到的?
我的机器是Debian Linux 8.6 (Python 2.7.9).
在python中,字典和列表是通过引用复制的:
>>> a = [0]
>>> b = a
>>> b
[0]
>>> a
[0]
>>> b[0] = 2
>>> a
[2]
>>> b
[2]
因此,b
和a
引用python内存中的同一个列表,修改其中一个会修改另一个。
所以,你能做的就是当你想要创建一个列表或字典的另一个副本时,创建一个副本。对于列表:
>>> b = a[:] # for a list
对于字典:
>>> b = a.copy() # for a dictionary
因此,在您的代码中,您需要使用newuser = USERINFO_STRUCT.copy()
USERINFO_STRUCT
复制到newuser
中