Python 为什么要用变量值引用
高洛峰
高洛峰 2017-04-17 10:57:04
[Python讨论组]
a = [1,3,5]
b = a
b[0] = 9
print a[0]

输出是 9
理由是:python 将常见类型的变量值做了引用,当b=a 时,实际上没有复制变量。
sys.getrefcount() 可以查看对某一值的引用次数

问题是:
为何要这么设计,这种设计在写代码的时候不会出现明显的bug么?
比如我需要在某个list基础上进行一些修改,但是以后会同时用到修改前和修改后的list,代码该怎么写呢?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
PHPz

这就是完全面向对象的设计,我对python了解不多,不过我估计数组在python里应该是一个对象,而对对象某个属性的赋值,是只会改变引用的对象的。比如在php里面

$a = new stdClass();
$b = $a;
$b->c = 'test';
print_r($a);

它会显示

stdClass Object
(
    [c] => ddd
)
巴扎黑

为什么要这样设计,没有深入了解过。
复制一个list可以这样用:copied_list = original_list[:]

这里有更多相关说明:http://docs.python.org/library/copy.h...

PHPz

深复制和浅复制的问题啊。
python这样设计据说是在大部分情况下,b=a就是你想实现的效果,如果非要用的话可以b=a[:]。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号