Python 中都是引用 yongmou

  大二寒假,在家没事看python,当看到python中数字是不可变的时候,我就看不下去了。如果i = i + 1这样简单的运算都要产生一个新的变量,这是多么低效的啊,明明直接往那块内存写入一个新值不就行了吗。

  现在,算是看出来了,这也是必须这么做的,因为这些最Basic的数字和字符串都用引用了。引用的意思就是Share一块存储空间,如果更改了这块存储区的内容,那么所有引用这块存储区的引用变量就都变了,这未免与老祖宗C语言的语义出入太大。

  Python中赋值,只是传递引用。

  所以,默认都是Shallow Copy。

  如果想要做Deep Copy,可以使用copy模块的deepcopy方法。也可以使用对应的工厂方法。另外,对于不可变的对象,即是执行deepcopy也不会真做,因为deepcopy是为了使改变不相互影响,既然不可改变那就没有必要了。

  分清楚是Shallow Copy还是Deep Copy很重要,无论是否有GC。例如,C++ STL是Deep Copy, 而python不是。

  并且赋值不是表达式。

  比较都是基于值的。这consistence很重要。不像java,整形用==号。String却要用equals方法。

原文地址:https://www.cnblogs.com/liyongmou/p/2056094.html