Python中的引用
下面我们通过一个例子来认识一下Python中的引用。
首先定义一个列表list_a
将list_a复制给list_b,这样list_b就具有跟list_a一样的列表元素了。>>> list_a = [1,2,3,'x','y']
修改一下list_b中的元素,然后分别查看list_b和list_a列表的值。>>> list_b = list_a >>> list_b [1, 2, 3, 'x', 'y']
从上面的结果看出,修改list_b列表中的值后,list_a列表中的值也跟着变了,这是为什么呢?让我们分别查看一下list_a和list_b指向的内存空间地址。>>> list_b[2] = 'new' >>> list_b [1, 2, 'new', 'x', 'y'] >>> list_a [1, 2, 'new', 'x', 'y']
从查看list_a和list_b的内存空间地址来看,list_a和list_b都指向同一内存空间地址,哦...原来list_b = list_a这样复制,list_b得到的是list_a指向的内存空间的地址值,也说明了list_a中存储的是指向后面list列表所在内存空间的地址值。这也说明了Python中,任何变量存储并非等号“=”后的值,而是给“=”后的值分配的内存空间的地址值。这就就是我们说的“引用”。>>> id(list_b) 39456560 >>> id(list_a) 39456560
引用不适用于定义后不可改变的数据类型,如:字符型、数字型、元组等。如果不可变类型也这样做的话,那一定是重新创建了一个新的对象。那真正的list复制是怎么样的呢 ?
还是让我们先从例子说起
从上面的操作结果可以看出,这种复制以后,list_a和list_b是相互独立、互不影响的,他们指向不同的内存空间,所以对任何一个list进行修改等操作都不会影响另一个list。所以真正的非引用式的list复制格式是这样的:>>> list_a = [1,3,4,5] 将list_a非引用的复制给list_b >>> list_b = list_a[:] >>> list_b [1, 3, 4, 5] >>> id(list_a) 39444688 >>> id(list_b) 39444768 >>> list_b[1] = 888 >>> list_b [1, 888, 4, 5] >>> list_a [1, 3, 4, 5]
list_dest = list_src[:]
Python中的引用
最新推荐文章于 2023-05-08 21:41:59 发布