python对象的引用_python对象的引用传递

1、 Python 变量及其赋值

a = 1

b = a

a = a + 1

这里首先将 1 赋值于 a,即 a 指向了 1 这个对象,如下面的流程图所示:

接着 b = a 则表示,让变量 b 也同时指向 1 这个对象最后执行 a = a + 1。需要注意的是,Python 的数据类型,例如整型(int)、字符串(string)等等,是不可变的。所以,a = a + 1,并不是让 a 的值增加 1,而是表示重新创建了一个新的值为 2 的对象,并让 a 指向它。但是 b 仍然不变,仍然指向 1 这个对象

因此,最后的结果是,a 的值变成了 2,而 b 的值不变仍然是 1

2、我们再来看一个列表的例子

l1 = [1, 2, 3]

l2 = l1

l1.append(4)

l1

[1, 2, 3, 4]

l2

[1, 2, 3, 4]

我们首先让列表 l1 和 l2 同时指向了 [1, 2, 3] 这个对象。

由于列表是可变的,所以 l1.append(4) 不会创建新的列表,只是在原列表的末尾插入了元素 4,变成 [1, 2, 3, 4]。由于 l1 和 l2 同时指向这个列表,所以列表的变化会同时反映在 l1 和 l2 这两个变量上,那么,l1 和 l2 的值就同时变为了 [1, 2, 3, 4]。

需要注意的是,Python 里的变量可以被删除,但是对象无法被删除。比如下面的代码:

l = [1, 2, 3]

del l

del l 删除了 l 这个变量,从此以后你无法访问 l,但是对象 [1, 2, 3] 仍然存在。

Python 程序运行时,其自带的垃圾回收系统会跟踪每个对象的引用。如果 [1, 2, 3] 除了 l 外,还在其他地方被引用,那就不会被回收,反之则会被回收。

总结:变量的赋值,只是表示让变量指向了某个对象,并不表示拷贝对象给变量;而一个对象,可以被多个变量所指向。

可变对象(列表,字典,集合等等)的改变,会影响所有指向该对象的变量。

对于不可变对象(字符串,整型,元祖等等),所有指向该对象的变量的值总是一样的,也不会改变。但是通过某些操作(+= 等等)更新不可变对象的值时,会返回一个新的对象。

变量可以被删除,但是对象无法被删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值