Python中的引用

Python中的引用

下面我们通过一个例子来认识一下Python中的引用。

首先定义一个列表list_a

>>> list_a = [1,2,3,'x','y']
将list_a复制给list_b,这样list_b就具有跟list_a一样的列表元素了。

>>> list_b = list_a
>>> list_b
[1, 2, 3, 'x', 'y']
修改一下list_b中的元素,然后分别查看list_b和list_a列表的值。

>>> list_b[2] = 'new'
>>> list_b
[1, 2, 'new', 'x', 'y']
>>> list_a
[1, 2, 'new', 'x', 'y']
 从上面的结果看出,修改list_b列表中的值后,list_a列表中的值也跟着变了,这是为什么呢?让我们分别查看一下list_a和list_b指向的内存空间地址。
>>> id(list_b)
39456560
>>> id(list_a)
39456560
从查看list_a和list_b的内存空间地址来看,list_a和list_b都指向同一内存空间地址,哦...原来list_b = list_a这样复制,list_b得到的是list_a指向的内存空间的地址值,也说明了list_a中存储的是指向后面list列表所在内存空间的地址值。这也说明了Python中,任何变量存储并非等号“=”后的值,而是给“=”后的值分配的内存空间的地址值。这就就是我们说的“引用”。
引用不适用于定义后不可改变的数据类型,如:字符型、数字型、元组等。如果不可变类型也这样做的话,那一定是重新创建了一个新的对象。

那真正的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_a和list_b是相互独立、互不影响的,他们指向不同的内存空间,所以对任何一个list进行修改等操作都不会影响另一个list。所以真正的非引用式的list复制格式是这样的:

list_dest = list_src[:]






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值