为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

aluckdog 2023-04-04 18:14:33
a = [1,3,5]b = ab[0] = 9print a[0]输出是 9理由是:python 将常见类型的变量值做了引用,当b=a 时,实际上没有复制变量。sys.getrefcount() 可以查看对某一值的引用次数比如我需要在某个list基础上进行一些修改,但是以后会同时用到修改前和修改后的list,代码该怎么写呢?
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

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

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

它会显示

stdClass Object(
    [c] => ddd
)


查看完整回答
反对 回复 2023-04-07
?
炎炎设计

TA贡献1808条经验 获得超4个赞

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

查看完整回答
反对 回复 2023-04-07
  • 2 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信