python的引用概念

引用的概念

python中变量和数据是分开存储的
数据保存在内存中的一个位置
变量中保存数据在内存中的地址。变量中记录数据的地址,就叫做引用
使用id()函数可以查看变量中保存数据所在的内存地址
注意:如果变量已经被定义,当给一个变量赋值时,本质上是修改了数据的引用.(不同于C语言)
变量不再对之前的数据引用,改为对新赋值的数据的引用

id方法的返回值就是对象的内存地址。

python中会为每个出现的对象分配内存,哪怕他们的值完全相等(注意是相等不是相同)。
如执行a=2.0,b=2.0这两个语句时会先后为2.0这个Float类型对象分配内存,然后将a与b分别指向这两个对象。所以a与b指向的不是同一对象:

>>> a=2.0
>>> b=2.0
>>> a is b
False
>>> a==b
True

但是为了提高内存利用效率对于一些简单的对象,如一些数值较小的int对象,python采取重用对象内存的办法.
如指向a=2,b=2时,由于2作为简单的int类型且数值小,python不会两次为其分配内存,而是只分配一次,然后将a与b同时指向已分配的对象:

>>> a=2
>>> b=2
>>> a is b
True

如果赋值的不是2而是大的数值,情况就跟前面的一样了:

>>> a=5555
>>> b=5555
>>> a is b
False
>>> id(a)
12464372
>>> id(b)
12464396

函数的参数和返回值的传递
在python中,函数的实参和返回值都是靠引用来传递的
调用函数时,本质上传递的是实参保存数据的引用,而不是实参保存的值
如果在函数内部没有修改形参的值,那么形参的引用的地址就是实参的地址
但是如果在函数内部修改了形参的值,就会为形参重新分配一块内存空间
函数的返回值也是也是变量的引用,而不是变量的本身

>>> def test(num):
	print("在函数内部%d对应的内存地址是%d" % (num, id(num)))	
>>> a=10
>>> id(a)
1947751488
>>> test(a)
在函数内部10对应的内存地址是1947751488

你可能感兴趣的:(Python)