python程序员的基本素养--你从没见过的Python变量引用

书到用时方恨少,事非经过不知难。这篇文章主要讲述python程序员的基本素养--你从没见过的Python变量引用相关的知识,希望能为你提供帮助。
变量在我们的编程中是最基础的概念,它就相当于我们盖大楼用的砖块一样不可或缺。理解变量的运行方式至关重要。
今天就让我们一起来谈一谈python变量的那些事。
1. 变量不是盒子让我们看看下面的代码

a = "hello,world" b = a c = [1,2,3]

对于我们初学者来说,变量的赋值是最容易走进误区的地方。最常见的误区是什么呢?
让我们看看下面这张图,这种想法是大错特错的。就是因为这种误区,使得我们的代码可能遇到很多问题。
python程序员的基本素养--你从没见过的Python变量引用

文章图片

那正确的是什么?变量赋值的时候做了什么呢?
2. 千奇百怪的变量
a = "hello,world" b = a c = [1,2,3]

所以上面的代码究竟做了什么?在这之前,我先大家讲个故事。
我们可以带着这个故事往下面看
python程序员的基本素养--你从没见过的Python变量引用

文章图片

根据这张图,我们上面的故事中:
实际上当我们对一个变量赋值的时候,我们的变量并没有存储这个值。而是绑定了一个内存地址id,当我们要用这个变量的值的时候,就去内存中寻找这个地址的存储的值
在代码中,我们改变了a变量的值,会发生什么呢?
我们再看看,改变a的变量会发生什么?
a = 123456

会这样吗?
python程序员的基本素养--你从没见过的Python变量引用

文章图片

我们改变a的值的时候,并不会直接去改变a指向的内存地址存储的值,而是新开辟一个空间存放新的值123456,把a的指向改成新空间的地址00030,如下图所示。正确的应该是这样:
python程序员的基本素养--你从没见过的Python变量引用

文章图片

b = [1,2,3]

python程序员的基本素养--你从没见过的Python变量引用

文章图片

为什么呢?其实这里很好理解,因为我们b赋值的时候是新建了一个对象。只要新建对象,就会重新开辟空间。
但是,像这样
b = c

这样并没有新建对象,而是将c的引用传递给了b,他们都指向一个对象。这里小伙伴们留意一下,不要被我的例子给带跑偏了。
python程序员的基本素养--你从没见过的Python变量引用

文章图片

d = c

python程序员的基本素养--你从没见过的Python变量引用

文章图片

d.append(4)

python程序员的基本素养--你从没见过的Python变量引用

文章图片

这究竟是什么问题呢?
为什么我们之前a从“hello,world”变成123456的时候,是新开辟一块空间。但是现在d从[1,2,3]变成[1,2,3,4],却直接在原内存空间里修改呢?
这就是python经典的面试题:对象的可变性?什么是可变对象,什么是不可变对象?
3. 可变对象与不可变对象在python中,一切皆对象,但是这对象也分为两类:
  • 可变对象(3个):List(列表)、Dictionary(字典)、Set(集合)
  • 不可变对象(3个):Number(数字)、String(字符串)、Tuple(元组)
Python中看可变与不可变数据类型,主要是看变量所指向的内存地址处的值是否会改变 。
3.2 不可变对象
> > > a = 10000 > > > id(a) 139964684838128 > > > a = 30000# 不可变对象,改变变量的值,实际上是实例化新对象、开辟新内存空间 > > > id(a)# 产生了新的内存地址,说明已经不是原来的对象了 139964684837872 > > >

3.3 可变对象
> > > a = [1,2,3] > > > b = a > > > id(a) 139711046464264 > > > id(b) 139711046464264 > > > b.append(4)# 可变对象,允许在原地改变对象的值 > > > id(b) 139711046464264# 内存地址没有改变,说明是在原内存空间改变值 > > > id(a) 139711046464264 > > > b [1, 2, 3, 4] > > > a [1, 2, 3, 4]

创作不易,且读且珍惜。如有错漏还请海涵并联系作者修改,内容有参考,如有侵权,请联系作者删除。如果文章对您有帮助,还请动动小手,您的支持是我最大的动力。
python程序员的基本素养--你从没见过的Python变量引用

文章图片

【python程序员的基本素养--你从没见过的Python变量引用】关注小编公众号:偷偷学习,卷死他们

    推荐阅读