Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回字典时,python的行为是否与JavaScript类似?_Javascript_Python - Fatal编程技术网

返回字典时,python的行为是否与JavaScript类似?

返回字典时,python的行为是否与JavaScript类似?,javascript,python,Javascript,Python,我想知道: def get_empty_cell(): return {'p': [[], []], 'h': {}, 'b': []} def create_new_board(old_board): height = len(old_board) + 4 width = len(old_board[0]) + 4 self.board = [None] * height for i in range(0, height): self.

我想知道:

def get_empty_cell():
    return {'p': [[], []], 'h': {}, 'b': []}

def create_new_board(old_board):
    height = len(old_board) + 4
    width = len(old_board[0]) + 4
    self.board = [None] * height
    for i in range(0, height):
        self.board[i] = [None] * width
        for j in range(0, width):
            # (!) deepcopy() 
            self.board[i][j] = copy.deepcopy(self.get_empty_cell())
我之所以使用deepcopy,是因为在很多情况下,不同的变量访问相同的内容。但是,当Python返回像我的代码中那样的“新”字典时,如果我想要不同的单元格,或者像JavaScript一样,我需要使用
copy.deepcopy


(和主题无关:我确信我的代码可以通过“Python方式”进行优化)

get\u empty\u cell()
每次都从一个文本返回一个新字典。无需再次复制。

获取空单元格()
每次从文本返回一个新词典。没有必要再复制它。

与另一个答案一样,您不需要复制,因为
get\u empty\u cell()
每次调用它时都会返回一个新的
dict

是的!您可以像这样优化代码:

self.board = [[self.get_empty_cell() for j in range(width)] for i in range(height)]

与另一个答案一样,您不需要复制,因为
get\u empty\u cell()
每次调用时都会返回一个新的
dict

是的!您可以像这样优化代码:

self.board = [[self.get_empty_cell() for j in range(width)] for i in range(height)]

get\u empty\u cell()。所以你不需要复制,在那里复制。我确信这种行为几乎在所有编程语言中都很常见。
get\u empty\u cell()。所以你不需要复制,在那里复制。我很确定这种行为几乎在所有编程语言中都很常见。AKS再次攻击
;^)但是我在Pycharm中得到一个警告,“j”和“I”没有被使用。有没有一种方法可以写这样的东西(没有尝试过)
[[self.get\u empty\u cell()*width]*height]
谢谢@OlivierPons!在你的上一个问题中,你也在为这种类型的优化而挣扎。为了更好地理解,我建议您阅读一下。我认为您可以这样写:
[[self.get\u empty\u cell()]*width]*height
,但我不建议这样做,因为这样一来,相同的dict副本将分发到每个单元格,如果您修改一个单元格,所有单元格都将被修改。好的。再次感谢。如果您不想收到这些警告,请查看。AKS再次罢工
;^)但是我在Pycharm中得到一个警告,“j”和“I”没有被使用。有没有一种方法可以写这样的东西(没有尝试过)
[[self.get\u empty\u cell()*width]*height]
谢谢@OlivierPons!在你的上一个问题中,你也在为这种类型的优化而挣扎。为了更好地理解,我建议您阅读一下。我认为您可以这样写:
[[self.get\u empty\u cell()]*width]*height
,但我不建议这样做,因为这样一来,相同的dict副本将分发到每个单元格,如果您修改一个单元格,所有单元格都将被修改。好的。再次感谢。如果您不想收到这些警告,请查看一下。+1表示返回的字典是使用文字定义的。如果情况并非如此,那么即使每个单元格是不同的字典,电路板中也可能有多个对同一对象的引用。+1表示返回的字典是使用文字定义的。如果不是这样的话,即使每个单元格是不同的字典,电路板中也可能有多个对同一对象的引用。