为什么要这么设计,这种设计在写代码的时候不会出现明显的bug么?

a = [1,3,5]b = ab[0] = 9print a[0]

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

比如我需要在某个list基础上进行一些修改,但是以后会同时用到修改前和修改后的list,代码该怎么写呢?


aluckdog
浏览 205回答 2
2回答

POPMUISE

这就是完全面向对象的设计,我对python了解不多,不过我估计数组在python里应该是一个对象,而对对象某个属性的赋值,是只会改变引用的对象的。比如在php里面$a = new stdClass();$b = $a;$b->c = 'test';print_r($a);它会显示stdClass Object(     [c] => ddd )

炎炎设计

深复制和浅复制的问题啊。python这样设计据说是在大部分情况下,b=a就是你想实现的效果,如果非要用的话可以b=a[:]。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python