Python中的变量与对象

昨天在刷Leetcode时,遇到下面一个问题:

t = [0 for i in range(3)]
M = [t for i in range(3)]
print(M)
M[0][0]+=1
print(M)

最后的结果却为[[1,0,0],[1,0,0],[1,0,0]],通过询问才知道变量和对象。虽然以前在C++中学过变量和对象,但是在python中基本没使用过。下面记录一下对变量和对象的学习:

学习python首先要了解这些词的关系:变量,对象,引用,类型。其中类型存在于对象,变量通过引用连接上对象。变量在赋值的时候才会创建,可以引用任何类型的对象。

以a=1为例,其中a为变量,1为对象,变量a通过引用连接上对象1.变量实际上是到对象内存空间的一个指针,变量是一个系统表的元素,拥有指向对象的连接空间。对象是分配的一块内存,有足够的空间去表示他们所代表的的值,引用是自动形成的从变量到对象的指针。

此外,对象又可分为可变对象和不可变对象:

1.可变对象:该对象对应的内存中的值可以被改变,因此变量改变后,该对象也被改变,即原地改变,如:list,dict,set

2.不可变对象:该对象对应内存中的值不会变,因此如果指向该对象的变量被改变了,会重新开辟一个地址,变量再指向这个新地址,如:int,float,str,tuple。

学习完这些知识,就我个人理解对一开始的程序做一个解释:

t = [0 for i in range(3)]

t为变量,[0,0,0]为对象

M = [t for i in range(3)]

M为变量,[t,t,t]为对象

因此就形成了下面这种关系:

在这里插入图片描述

故在改变其中一个t时,三个t都会发生改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值