Skip to main content
 首页 » 编程设计

python之字典列表中的问题

2025年05月04日11开发

class MyOwnClass: 
 
  # list who contains the queries 
  queries = [] 
 
  # a template dict 
  template_query = {} 
  template_query['name'] = 'mat' 
  template_query['age'] = '12' 
 
obj = MyOwnClass() 
 
query = obj.template_query 
query['name'] = 'sam' 
query['age'] = '23' 
obj.queries.append(query) 
 
query2 = obj.template_query 
query2['name'] = 'dj' 
query2['age'] = '19' 
obj.queries.append(query2) 
 
print obj.queries 

它给了我

[{'age': '19', 'name': 'dj'}, {'age': '19', 'name': 'dj'}] 

虽然我希望有

[{'age': '23'  , 'name': 'sam'}, {'age': '19', 'name': 'dj'}] 

我想为这个列表使用一个模板,因为我会经常使用它,并且有一些不需要更改的默认变量。

为什么 template_query 本身会发生变化?我是 python 的新手,我感到很困惑。

请您参考如下方法:

这是因为你每次都指向同一个字典......并覆盖键......

# query = obj.template_query - dont need this 
query = {} 
query['name'] = 'sam' 
query['age'] = '23' 
obj.queries.append(query) 
 
query2 = {} #obj.template_query-dont need this 
query2['name'] = 'dj' 
query2['age'] = '19' 
obj.queries.append(query2) 

这应该可以证明你的问题

>>> q = {'a':1} 
>>> lst = [] 
>>> lst.append(q) 
>>> q['a']=2 
>>> lst 
[{'a': 2}] 
>>> lst.append(q) 
>>> lst 
[{'a': 2}, {'a': 2}] 

你可以用不同的方式实现你的类

class MyOwnClass: 
  # a template dict 
  @property 
  def template_query(): 
      return {'name':'default','age':-1} 

这将使 obj.template_query 每次都返回一个新的字典