在这里的代码中 How do I force static methods to use local not global variables in Python?
我有一个变量,除了问题中的方法之外,还在方法之间传递。变量是current_line
def line_tocsv(csv_dict={}, line={}, current_line=0):
csv_line, current_line = LineHandler.create_csv(current_line, kline)
if current_line in csv_dict:
csv_dict[current_line].update(csv_line)
else:
csv_dict[current_line] = csv_line
return csv_dict
运行此代码时,它会生成与此
类似的输出>>> a={0:{"aa":1,"bb":"wasd"},1:{"aa":1,"bb":"wasd"}}
>>> a
{0: {'aa': 1, 'bb': 'wasd'}, 1: {'aa': 1, 'bb': 'wasd'}}
>>> a[1].update({"cc":"foo"})
>>> a
{0: {'aa': 1, 'cc': 'foo' 'bb': 'wasd'}, 1: {'aa': 1, 'cc': 'foo', 'bb': 'wasd'}}
如何制作它以便csv_line dict只输入一个子字典?! 更改变量名称不起作用,我怀疑这是因为只有引用在函数之间传递,但我不知道足够的python知道这些引用实际去哪里以及它们的操作顺序是什么
答案 0 :(得分:1)
首先,不要使用可变的默认参数
def line_tocsv(csv_dict=None, ....):
if not csv_dict:
csv_dict = {}
....
接下来,使用dict的副本,而不是指针:
csv_dict[current_line] = csv_line.copy()
编辑:
尝试这样做:
>>> a
{1: 2, 3: 4}
>>> b = {1:a,2:a}
>>> b
{1: {1: 2, 3: 4}, 2: {1: 2, 3: 4}}
>>> b[1][7] = 8
>>> b
{1: {1: 2, 3: 4, 7: 8}, 2: {1: 2, 3: 4, 7: 8}}
如果你想使用dict的值而不是指针:
>>> a
{1: 2, 3: 4}
>>> b = {1:a.copy(),2:a.copy()}
>>> b
{1: {1: 2, 3: 4}, 2: {1: 2, 3: 4}}
>>> b[1][7] = 8
>>> b
{1: {1: 2, 3: 4, 7: 8}, 2: {1: 2, 3: 4}}