python
1)值传递问题
- python中到底是"值传递"还是"引用传递",主要取决于对象是否是可变的.
- 1)函数传参:
- ·基本数据类型:int、float、str;元祖属于不可变对象;传递的是"原值"的拷贝
- ·列表、字典、类、类实例属于可变对象;传递的是"值引用"
- 2)变量复制
- ·python中的变量复制(a=b)也是同样的道理,不可变对象被真正复制;而可变对象只是传递了一个
- "引用"
- 例子:
- a = 1
- b = a,此时改变a的值不会改变b的值
2)内存机制
- 1)变量值在内存中存放
- ·基本数据类型:int、str、float等,相同的值赋给不同的变量,内存地址是一致的;
- ·列表、元祖、字典,相同的值赋给不同的变量,内存地址是不一致的
- 例子:
- a = 1 b = 1 id(a)=id(b) 这个是成立的
- a = [1,2] b = [1,2] id(a) = id(b) 这个是不成立的
- 2)内存管理机制
- ·引用计数:追踪内存中的对象
- 当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时
- ,它被垃圾回收。
- ·内存池:目前暂不讨论
孔小发爱吃鱼” 博客,谢绝转载!
【python】python值传递问题和内存管理机制
python
原文:http://kongxiaofa.blog.51cto.com/11365278/1982800
来源: http://www.bubuko.com/infodetail-2398474.html