有人可以向我解释一下吗?这对我没有任何意义.
我将字典复制到另一个字典中并编辑第二个字典,然后更改两个字典 为什么会这样?
>>> dict1 = {"key1": "value1", "key2": "value2"}
>>> dict2 = dict1
>>> dict2
{'key2': 'value2', 'key1': 'value1'}
>>> dict2["key2"] = "WHY?!"
>>> dict1
{'key2': 'WHY?!', 'key1': 'value1'}
Run Code Online (Sandbox Code Playgroud) 可能重复:
为什么在这种情况下不需要全局关键字?
我想知道为什么我可以在没有global关键字的情 为什么它对其他类型是强制性的?这背后有什么逻辑吗?
例如代码:
#!/usr/bin/env python3
stringvar = "mod"
dictvar = {'key1': 1,
'key2': 2}
def foo():
dictvar['key1'] += 1
def bar():
stringvar = "bar"
print(stringvar)
print(dictvar)
foo()
print(dictvar)
print(stringvar)
bar()
print(stringvar)
Run Code Online (Sandbox Code Playgroud)
给出以下结果:
me@pc:~/$ ./globalDict.py
{'key2': 2, 'key1': 1}
{'key2': 2, 'key1': 2} # Dictionary value has been changed
mod
bar
mod
Run Code Online (Sandbox Code Playgroud)
我期待的地方:
me@pc:~/$ ./globalDict.py
{'key2': 2, 'key1': 1}
{'key2': 2, 'key1': 1} # I didn't use global, so dictionary remains the same
mod
bar
mod
Run Code Online (Sandbox Code Playgroud) 我想实现一个函数,允许其参数的值"就地"重新分配.
例如,一个函数将增加参数x并减少参数y.(这只是一个简单的例子 - 动机是X和Y实际上是大型数据帧的单个元素;它们的表达式很笨拙;而且这个操作将经历多次迭代.)
def incdec(x,y,d):
x += d
y -= d
Run Code Online (Sandbox Code Playgroud)
理想情况下,这将运行为:
X = 5; Y = 7; d = 2
incdec(X,Y,d)
Run Code Online (Sandbox Code Playgroud)
发现这些值现在是X = 7和Y = 5.但当然它不会那样 - 我想知道为什么?
我正在编写一个构建字典的脚本,我观察到一种奇怪的行为.
我将在下面用一个小例子来描述它.
def test_f(parameter):
parameter.update({'watermelon':'22'})
return parameter
fruits = {'apple':20, 'orange': 35, 'guava': 12}
new_fruits = test_f(fruits)
Run Code Online (Sandbox Code Playgroud)
简而言之,我有一个字典,我传递给一个函数,test_f.该函数将新字典附加到输入并返回它.我在一个名为的变量中捕获函数的输出new_fruits.然而,这也改变了原始变量fruits.
为什么原始变量会fruits发生变化?我update是以错误的方式使用该方法吗?