Python文档似乎不清楚参数是通过引用还是值传递,以下代码生成未更改的值'Original'
class PassByReference:
def __init__(self):
self.variable = 'Original'
self.change(self.variable)
print(self.variable)
def change(self, var):
var = 'Changed'
Run Code Online (Sandbox Code Playgroud)
有什么我可以通过实际参考传递变量吗?
我在接受采访时被问到为什么String是不可变的
我这样回答:
当我们在java中创建一个字符串时,
String s1="hello";
就会在字符串池(hello)中创建一个对象,而s1将指向hello.如果我们再这样做,String s2="hello";
那么将不会创建另一个对象但s2将指向,hello
因为JVM将首先检查如果字符串池中存在相同的对象. 如果不存在则只创建一个新对象,否则不创建.
现在,如果假设Java允许串可变那么如果我们改变S1到hello world
那么S2价值也将hello world
因此Java字符串是不可改变的.
如果我的答案是对还是错,请问任何人可以告诉我吗?
我理解在python中的每一件事,无论是数字,字符串,字典还是任何东西都是一个对象.变量名只是指向内存中的对象.现在根据这个问题,
>> a_dict = b_dict = c_dict = {}
这将创建一个空字典,并且所有变量都指向此dict对象.因此,改变任何一个都会反映在其他变量中.
>> a_dict["key"] = "value" #say
>> print a_dict
>> print b_dict
>> print c_dict
Run Code Online (Sandbox Code Playgroud)
会给
{'key': value}
{'key': value}
{'key': value}
Run Code Online (Sandbox Code Playgroud)
我已经理解了指向对象的变量的概念,所以这看起来很公平.
现在即使它可能很奇怪,因为它是如此基本的陈述,为什么会发生这种情况?
>> a = b = c = 1
>> a += 1
>> print a, b, c
2, 1, 1 # and not 2, 2, 2
Run Code Online (Sandbox Code Playgroud)
问题的第一部分:为什么这里应用的概念不同?
实际上,当我试图为此寻找解决方案时,出现了这种疑问:
>> a_dict = {}
>> some_var = "old_value"
>> a_dict['key'] = some_var
>> some_var = "new_value" …
Run Code Online (Sandbox Code Playgroud)