Pyhton基础学习系列1——认识变量及定义赋值变量的底层逻辑

认识变量



前言

数据是任何编程语言中都必须需要要去处理的东西,其中python虽然可以直接进行数据的处理,但是一般我们都会用变量去存储数据,然后再调用数据,方便后面的使用。


提示:以下是本篇文章正文内容,下面案例可供参考

一、变量是什么?

变量能够保存任意类型的数据,就像一个容器,每当我们需要里面的数据时只要知道指定的容器就可以使用了,就像我们平时住酒店,可以把变量看做房间号,我们入住的客人看做容器里面的数据,每当前台需要查找每个房间里面的住宿情况和客人信息时,就会用房间号去查询信息,节省了很多时间,方便使用。

二、变量的使用

1.常见的数据类型

变量能够保存任意类型的数据
其中Python中常见的几个数据类型:
整型(int)、浮点型(float)、布尔(bool)、字符串(str)、列表(list)、元组(tuple)、集合(set)、字典(dict)等

# 整型(int)
a = 100
# 浮点型(float)
b = 100.0
# 布尔(bool)
c = True
# 字符串(str)
d = 'abc'
# 列表(list)
e = [1, 2, 3]
# 元组(tuple)
f = (1, 2, 3)
# 集合(set)
g = {1, 2, 3}
# 字典(dict)
# 键值对
h = {'name': '马脑阔', 'age': 22, 'address': '四川'}

提示:在后面的文章中会详细对各种数据类型做一些详细的介绍

2.如何定义变量(创建变量)

代码如下(示例):

"""
语法:变量名 = 数据

说明:
1)变量名   -  由程序员自己命名
               两个要求:a.是标识符  b.不是关键字
               三个规范:a.见名知义(看到变量名就大概知道这个变量中保存的是什么数据)  b.不是使用系统函数名、类名或者模块名
                        c.所有字母都小写,多个单词之间用下划线隔开(3.9.x以后也支持驼峰式命名)
2)=     -     固定写法(赋值符号)
3)数据    -    可以是任何有结果的表达式;包括:具体的某一个数据、运算表达式、函数调用表达式
"""
# 在使用变量时只需要知道名字就可以了
name = '马脑阔'
age = 18
print(name)# 马脑阔

提示:变量的值是会改变的,如果变量名重复,里面的值也会被下次赋给变量的值覆盖。变量可以同时赋多个相同的值也可以赋不同的值。

age = 18
print(age)# 18
age = 20
print(age)# 20

# 同时定义多个变量赋相同的值
x = y = z = 100
print(x, y, z)#100 100 100

# 同时定义多个变量赋不同的值
m, n, t = 100, 200, 300
print(m, n, t)

3.type()函数

在定义变量时同时也要注意数据的类型,在后面的一些计算和操作时,变量的数据类型必须统一。其中可以用type函数去查看数据类型。

# 整型(int)
a = 100
# 浮点型(float)
b = 100.0
# 布尔(bool)
c = True
# 字符串(str)
d = 'abc'
# 列表(list)
e = [1, 2, 3]
# 元组(tuple)
f = (1, 2, 3)
# 集合(set)
g = {1, 2, 3}
# 字典(dict)
# 键值对
h = {'name': '马脑阔', 'age': 22, 'address': '四川'}
# type():用于查看数据的数据类型
print(
    type(a),type(b),type(c),type(d),type(e),type(f),type(g),type(h)
)
# <class 'int'> <class 'float'> <class 'bool'> <class 'str'> <class 'list'> <class 'tuple'> <class 'set'> <class 'dict'>

二、python定义变量和重新给变量赋值的底层逻辑

  1. 在编程语言中给变量赋值时,是需要先去申请运行内存然后再保存数据的。
  2. c、java语言中,定义变量都是先定义类型再定义变量最后存储。例如:int a = 10;然后会根据数据类型给出运行内存大小然后存储,一般int类型占4个字节,就给4个字节的内存大小,所以一般学习其他编程语言时需要去记住各种数据类型需要占用多少字节。
  3. python定义变量的时候会在运行内存中申请内存,内存申请多大看数据(数据需要多大就申请多大),如果数据需要10字节就申请10字节的内存。
  1. 这里简单介绍一下我们计算机的存储单位
    (计算机最小内存单位)位(bit)
    (程序申请内存的最小单位)1字节(byte) = 8位
    1K = 1024byte
    1M = 1024K
    1G = 1024M
    1T = 1024G

1. 存储方式

  • 假如我们需要存储一杯可乐,python会根据你要装多少升的可乐就去准备多少升的容器,c和java则是根据你准备的多少升容器去装多少升的可乐。
  • 这里多少升就是我们数据内容和大小,容器就是变量,然后定义好之后会进行关联,使用时会去调用地址,这里地址我们是看不到的,只能使用代码去看。

2.重新赋值

  • python重新赋值时,会根据新的数据的大小,申请新的内存,将新的数据保存在新的内存中。还是用上面可乐的例子说明,就类似于又重新准备个容器倒入新的可乐,然后之前的容器就扔了。(可以理解为自动释放空间),而c和java则是把之容器里装的可乐到了(也就是删除)然后再装新的可乐(也就是新的数据)。
# id(变量) 获取变量对应的内存空间在计算机中的地址
# 重新赋值以后python的内存地址是会改变的
# c和java重新赋值以后不会改变
a = 10
print(id(a))         
a = 1000
print(id(a))
# 17328720
# 19159376

提示:在赋同样内容的变量时,可能地址会是一样的,那是因为python解释器运行时会创建固定值的地址,像str数据类型,针对只含有字母、数字、下划线等特殊字符,创建同样内容字符串的地址相同,int也是一样,这种机制被称为驻留机制。

3.底层逻辑

  • python保存数据的底层逻辑:
  • 1)变量保存的不是数据,而是数据在内存中的地址;用一个变量给另外一个变量赋值,赋的是地址
  • 2)定义变量保存数据的时候如果数据是不可变类型的数据,不会直接申请内存而是先检查内存中是否已经存在指定的数据,如果存在直接将数据在内存中的地址保存到变量中;如果不存在才会申请内存保存数据,再申请的内存的地址保存到变量中。
  • 3)定义变量保存的是可变类型的数据,会直接申请新的内存。
# 像这种不可变的类型数据这样的赋值就等同于a = b = 1000,就相当于是把a的地址赋值给b
a = 1000
b = 1000
print(id(a), id(b))
# 18962736 18962736
# 可变的类型数据就会重新再申请一个内存
list1 = [20, 30]
list2 = [20, 30]
print(id(list1), id(list2))
# 18882048 18882112

# 这样做的目的就是为了操作list1的时候list2不受影响,假如我添加一个元素去list1,list2不受影响。
list1.append(50)
print(list1)
# [20, 30, 50]
print(list2)
# [20, 30]

#如果是想两个可变的数据类型相关联,就它怎么变我就怎么变,就得把地址赋值过去。
list3 = list1
list3.append(40)
print(list1)
# [20, 30, 50, 40]
# 这样赋值以后只要list1改变list3也会变,list3改变list1也会跟着改变

提示:每次重新运行地址都会改变

总结

python定义变量是所有编程里相较下来比较简单的,因为不需定义数据类型,像c和java都需要先定义数据类型才能定义变量,所以根据它们底层的存储逻辑也可以看出python在节约内存空间这方面的优点,因为是根据数据申请存储空间,而c和java在效率方面会更好,因为不需要再计算数据的大小。其中还得弄清楚python底层保存数据的方法,保存的都是地址,而当赋值时,究竟赋给的是原本就有的地址还是要建立新的地址保存。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值