# -*- 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)
我想要结果:
{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)。
答案 0 :(得分:4)
在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
因此,在您的代码中,您需要的是使用USERINFO_STRUCT
将newuser
复制到newuser = USERINFO_STRUCT.copy()