Python学习6:动态类型与共享引用

在Python中变量没有固定的类型,变量只是指向想内存空间中对象的一个引用或指针,类型的概念属于对象,不属于变量

>>>a=3

>>>b=a

其内存模型如下图所示

 

 

当执行a=3时,程序首先创建int型变量3,然后让a指向3

当执行b=a时,程序让b也指向int型变量3

a和b在这里都是指向int型变量3的引用

 

再看一个例子

>>>list_1 =[1,2,3,4] 

>>>list_2 =list_1 

>>>list_2 

>>>list_1[0]= 'python' 

>>>list_2 

 

result:

[1,2,3,4]

['python',2,3,4]

list_1首先指向了[1,2,3,4],然后list_2也指向了该列表(list_1和list_2指向相同的列表),当改变list_1时,list_2中的元素也发生了改变

 

如果你不想要这样的现象发生,需要python对象拷贝,而不是创建引用。

>>>list_1=[1,2,3,4]

>>>list_2=list_1[:]

>>>list_1[0]=11

>>> list_1

[11, 2, 3, 4]

>>> list_2

[1, 2, 3, 4]


注意:上述例子只是为了说明原理,其实python内部会缓存小整数和字符,并不会立即销毁


python动态类型

python是靠动态类型来实现以上操作的。“每一个对象都有两个标准的头部信息:一个类型标识符去标示这个对象的类型,以及一个引用的计数器,用来决定是不是可以回收这个对象” 。在内部,python通过每一个对象中的计数器来记录引用直到这个对象上的次数,一旦这个计数器被设置为零,这个对象的内存空间将自动被回收。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值