We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
不知道问题1的回答可不可以延伸到变量的作用域上?
The text was updated successfully, but these errors were encountered:
参数传递 和 作用域 应当是两个问题吧?
Sorry, something went wrong.
感觉第一个问题举的例子不恰当。 应该使用相同的操作来考察可变对象和不可变对象。现在的例子中,对于不可变对象(整数)在函数中创建了一个新的对象,然后把函数中的a绑定到这个新的整数对象上,对于可变对象(列表)在函数中的append操作只是就地更改了原来的列表对象,如果在这个函数中同样创建一个新的列表对象,然后把a绑定到新的列表对象上,函数外的a仍然还是原来的对象。
def fun_a(a): print id(a) a = type(a)() print id(a) print a a = 1 fun_a(a) print a a = [1] fun_a(a) print a
fun_a中的操作对所有类型都创建了一个新的对象,把内部的a绑定到新创建的对象上,并不影响外部的a指向的对象
def fun_b(a, b): print id(a) a = a + b print id(a) print a a = 1 b = 2 fun_b(a, b) print a a = [1, 2] b = [3, 4] fun_b(a, b) print a
和第一个例子一样,函数中的中缀操作符 + 创建一个新的对象,并不影响外部的a所指向的对象
+
def fun_c(a, b): print id(a) a += b print id(a) print a a = 1 b = 2 fun_c(a, b) print a a = [1, 2] b = [3, 4] fun_c(a, b) print a
这个例子中的 += 对于不可变对象创建一个新的对象,对于可变对象就地修改。
+=
个人认为关于参数传递的解释的话,不能套用c的指针或者cpp的reference,一定会造成误解的;而且要是非要强调mutability的话也是可能会找成误解。我的建议就是理解为名字,一个变量名字对应相应的object,如果名字对应的可以被修改,那么就修改;如果不可以,那么就不可以修改,只能重新create新的object,然后把名字reassign指到新的object
No branches or pull requests
不知道问题1的回答可不可以延伸到变量的作用域上?
The text was updated successfully, but these errors were encountered: