如何判断python中的整数变量是否具有超出范围的隐藏值?

时间:2016-02-08 07:59:54

标签: python

在这里的代码中 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知道这些引用实际去哪里以及它们的操作顺序是什么

1 个答案:

答案 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}}