gpt4 book ai didi

python - 如何不改变外在值(value)观?

转载 作者:行者123 更新时间:2023-12-01 04:19:12 25 4
gpt4 key购买 nike

我是 Python 新手,因此我的问题看起来非常愚蠢。我尝试制作一些制作二维数组的程序。一个函数将项目放入列表并返回一个数组。然后,第二个函数将第一个函数的结果放入外部列表中。我的程序如下所示:

def get_matrix():
d = some_dict
matrix = list()
while len(matrix)<3:
row = get_row(d)
matrix.append(row)
return matrix

def get_row(dict):
array = list()
for t in range(3):
a = dict.popitem()
array.append(a)
return array

some_dict = dict()

for x in range(9):
some_dict[x] = "a"+str(x)

print(some_dict)

print(get_matrix())

效果很好。但是如果我不想更改外部函数中的 list d 而只是这样做怎么办:

def get_matrix():
d = some_dict
matrix = list()
while len(matrix)<3:
row = get_row(d)
matrix.append(row)
for x in row:
d.pop(x)
return matrix

换句话说,我想将整个字典保留在外部函数中。实际上我想知道如果我们只改变内部函数参数给出的字典,为什么外部值会改变?

最佳答案

您正在内部函数中弹出字典的项目。由于您将可变对象(字典)的句柄传递给 get_row() 函数,因此弹出也会影响外部 get_matrix 中的字典。

请注意,字典作为复杂对象,在这方面的行为与不可变参数(int、float、str 等)不同。它们的值保持不变。

你可以传递你的字典的副本

row = get_row(copy.deepcopy(d))

如下所述:Understanding dict.copy() - shallow or deep? 。顺便说一句,您可以访问字典中的值而无需弹出它们

def get_row(dict):
...
for t in range(3):
...
# a = dict.popitem()
a = dict[t]

这也将使字典毫发无伤。

关于python - 如何不改变外在值(value)观?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33923032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com