Python没有变量的概念?

在C++中,「引用」是在C的基础上新增的一种复合类型,是已定义变量的别名,比如将b作为变量a的引用,则可以交替使用a和b来表示该变量。引用最主要的用途是作为函数的形参,所以C++ Primer Plus(第6版)直到第8章介绍函数时才讨论引用(第5版是在2.3节「复合类型」中介绍的)。通过将引用变量用作参数,函数将使用原始数据,而不是其副本,这样除指针外,引用也为函数处理大型结构提供了一种非常方便的途径,同时对于设计类来说,引用也是必不可少的。C++新增的这项特性是对C语言的超越,C语言只能按值传递,如果想避开按值传递的限制,只能使用按指针传递。

在Java中,基本数据类型包括数值型(整数、浮点数)、字符型、布尔型,除基本类型之外的变量类型都称之为引用类型(如类、接口、数组)。Java中的对象是通过引用对其操作的。

以上我们提到「变量」时,是在说某个变量是某某类型的变量,「引用」也是一种变量类型。而在Python中,你可以认为没有「变量」的概念,都是「对象引用」。由于在Python中几乎察觉不到变量和对象引用之间的差别,因此这两个术语往往是交替使用的。

C++例子:

有几点需要注意的:1.C++中引用必须在声明时初始化,而不能像指针那样,先声明再赋值。2.引用更接近const指针,即一旦与某个变量关联起来,就将一直效忠于它。3.给引用赋值(非初始化赋值)就是给引用指向的变量赋值。(这也是为什么C++说引用是变量的别名)

C++代码的执行结果:

00EFFEC0

00EFFEC0

def

00EFFEC0

00EFFEC0

可见,给变量y赋值就是给x赋值,并且变量修改后,x和y的地址都保持不变。

在Python和Java中,引用不需要在声明时就赋予一个初始值,也不是一旦绑定就不能更改。不同在于:Java中引用声明后是有类型的,而Python中引用是无类型的,可以随意指向任何数据类型。

Java例子:

以上Java代码的执行结果如下:

HelloWorld

HelloWorld

test

3556498

HelloWorld

可见Java中x并不是s的别名,修改x时,s并没有同时被修改,并且x引用的值被修改后,x的地址相应发生变化。(hashcode某种程度上标识了对象的内存地址)

还有一点,Java和Python中字符串类型变量是不可以修改的,但仍支持「连接」操作。

Python例子:

执行完后,对象‘abc’不再有引用指向它,它会被Python的内存处理机制当成垃圾回收,释放内存,而x则指向了新的对象。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171212G10EZO00?refer=cp_1026

相关快讯

扫码关注云+社区