python作为一种脚本语言,也有与C++相同的特性:变量的引用与拷贝。下面我们来简单学习一下。
1. 引用
首先需要说明的是python中每一个变量都是一个对象,我们可以使用id()查看每个对象的id。例如:
>>> a=[1,2,3]>>> b=a>>> print b
[1, 2, 3]>>> a+=[4]>>> print a
[1, 2, 3, 4]>>> print b
[1, 2, 3, 4]>>> id(a)65398584>>> id(b)65398584
上面这个例子中,我们首先令b=a。当我们对a指向的对象进行修改后,我们在查看b的结果,发现b的结果也被修改了。我们再利用id()函数查看他们的id号,发现他们其实指向同一个对象。这就是python中的引用。不过python中对整数对象和字符串对象进行了特殊处理。让我们看个例子:
>>> a=1>>> id(a)3443120>>> b=1>>> id(b)3443120>>> c=2.0>>> id(c)31849288>>> d=2.0>>> id(d)31849256>>> e='123'>>> id(e)66230048>>> f='123'>>> id(f)66230048
各位有没有发现,a和b、e和f指向同一个对象,而c和d指向不同的对象。为什么这样?整数对象和字符串对象是不可变对象,所以 Python 会很高效的缓存它们。这会造成我们认为 Python 应该创建新对象时,它却没有创建新对象的假象。如我们再看个例子:
>>> g=123456789>>> h=123456789>>> id(g)41668476>>> id(h)41668512
看到这个例子,我相信一定会有人有疑问的,g和h也是整数,值也相同,为什么这一次指向的不是同一个对象呢?因为Python 仅缓存简单整数,它认为在 Python 应用程序中这些小整数会经常被用到。
2. 拷贝
那么我们如何在python中实现拷贝呢?其实也简单,就是利用切片对象。例如:
>>> a=[1,2,3]>>> print id(a)
58386392>>> b=a>>> print b
[1, 2, 3]>>> print id(b)
58386392>>> c=a[:]>>> print id(c)
58373944>>> print c
[1, 2, 3]>>>
好了,今天的知识点就写到这里。如果有遗漏的知识点,以后还会更新的。