Comments (3)
参数传递 和 作用域 应当是两个问题吧?
from interview_python.
感觉第一个问题举的例子不恰当。 应该使用相同的操作来考察可变对象和不可变对象。现在的例子中,对于不可变对象(整数)在函数中创建了一个新的对象,然后把函数中的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
这个例子中的 +=
对于不可变对象创建一个新的对象,对于可变对象就地修改。
from interview_python.
个人认为关于参数传递的解释的话,不能套用c的指针或者cpp的reference,一定会造成误解的;而且要是非要强调mutability的话也是可能会找成误解。我的建议就是理解为名字,一个变量名字对应相应的object,如果名字对应的可以被修改,那么就修改;如果不可以,那么就不可以修改,只能重新create新的object,然后把名字reassign指到新的object
from interview_python.
Related Issues (20)
- 资料有一处错误 HOT 3
- 乐观锁悲观锁 导读链接 挂了 HOT 1
- 乐观锁悲观锁链接挂了,建议改用这个链接:https://my.oschina.net/feixuewuhen/blog/800346
- 和小土刀的笔记一模一样 HOT 2
- 对字符串格式化
- 关于 "23 Python里的拷贝"的疑问
- a
- GIL 部分描述有误 HOT 1
- __new__和__init__的区别 HOT 1
- 编程题 第8题 问题描述不够精确
- Gitbook 的链接看不到里面的内容 HOT 3
- 感觉GET和POST区别的解释有点问题
- 13 关于python的重载 应该是可以通过classmethod实现
- 3 @classmethod 和@statimethod 在子类继承上也有区别
- 交叉链表求焦点,修改了一下后面那个解答是错误的 HOT 1
- 有一部分简书的链接404了 可能需要更新一下超链接
- [名词修改]自省建议改成反射
- 15 中的 __new__ 方法是类方法吧 HOT 2
- 这里面应该有不少答案是由英文翻译过来的,而且是非技术人员翻译,很容易被误导,请注意! HOT 1
- 6.字典推导式中有错误 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from interview_python.