python:变量赋值 ?= 变量贴标签

之前一直在学C和C++,现在初学python,把两种语言对比着学也不失为一种好方法。
不论初学哪种程序语言,变量赋值语句都是最最基本的一种语句。从实现的底层原理上看,对于变量赋值语句而言,C语言是“装盒子式”的,python是“贴标签式”的。比如:
对于C语言而言,假如有一条赋值语句:

int a;
a = 10;

那么C语言的对这一条语句的处理是:
①在内存中为变量a找到一片供存储的内存空间;
②往这一片内存空间中填上10.

但如果是python,赋值语句

a = 10

(以下是我的理解)实际上是现在内存空间中找到一片区域存储10,之后再把a作为一个标签贴在10这一片区域上.

所以比较起来,C语言实际上就是先为变量找到一片内存,再往里面填东西;而python实际上是先为“东西”找到一片内存,再往上面贴标签。

实现原理的不同也就造成了C语言和python语言在变量赋值的一些不同之处,比如对于python,有以下几条shell语句:

>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]

如果按照C语言的方式来理解,那么new和old可以看成是指向同一片内存空间的指针,所以old改变了,new也应该改变;但实际上结果是:

>>> print(new)
[1, 2, 3, 4, 5]

这正是python贴标签式的变量赋值方法导致的。old = [6]这个语句实际上是将old这个标签贴在了一片新的内存空间上,这片内存空间中存储了[6]这个列表。验证如下:

>>> id(new)
46077632
>>> id(old)
45876008

可以看出old在被赋了新值后不再是指向原来的内存空间了,而这和C语言是完全不同的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值