Python中变量之间赋值的理解

1.问题描述

在Python项目中,有一个这样的需求:

一个文件a需要负责提供一个函数,返回该文件中一个全局变量value,类似与get_value()接口

在另一个文件b中,创建一个变量temp=get_value(),去取a文件中的value,而且希望后续a文件中对value的修改,会直接影响到b文件中的temp

例如:在a文件中,有个函数叫set_value(),里面执行value = Myclass(),希望temp也受到修改影响,变为指向新的MyClass

复制代码
# a.py

value = MyClass()

def get_value():
  return value

def set_value():
  value = MyClass()

# b.py
import a

temp = get_value()
print(temp)
set_value()
print(temp)

但上面这样操作,显然不会满足需求。

2.Python中变量的赋值逻辑

对于等号右方为非变量名时,如:value = "string" 或者 value = 10 或者 value = MyClass()

均可以理解成:value指向了一块空间a ,里面存放着右侧这些数据.(value为该指针名字)

当等号右方为变量名时,如 b = value,

可以理解成:一个新的指针b,指向了value所指向的那块空间

所以,理解了上述赋值的区别后,1中的情况就很好解释了:

temp = get_value()时,temp指针指向了value所指向的那块空间

此时调用set_value,value又重新指向了另一块新的MyClass空间,但temp依旧指向原来的MyClass

所以value的修改并不会影响temp,故无法满足需求。

3.解决方案

很明显,上述实现的阻碍在于,value更新时,会指向新的空间 ,导致外界的temp无法及时同步更新。

因此我们考虑让value降低一层,包裹在更高一层的容器中

有一个list数据a, a = [value, value1, value2, value3]

我们get这个list a,get_a(), temp = get_a()

按照上述的理解,所有的value实际上都是一个指针,指向了赋值给自己的空间

如果此时set_value,实际上是修改a[0]=MyClass(),由于value被a容器所管理,即使它指向了新的地方,也可以通过a直接访问 ,又temp指向的本身是容器a,故temp也可以直接访问到新的value

故我们目的达到,当value被修改时,我们可以通过temp取到更新后的value值

Ps:最主要的是和C++中的赋值区分开,不能单纯用C++的引用去理解

相关推荐
萧鼎4 小时前
深入理解 Python Scapy 库:网络安全与协议分析的瑞士军刀
开发语言·python·web安全
阿拉丁的梦6 小时前
教程1:用vscode->ptvsd-创建和调试一个UI(python)-转载官方翻译(有修正)
开发语言·python
名难取aaa7 小时前
celery solo acks_late得不到预期
python·celery
大翻哥哥9 小时前
Python地理空间数据分析:从地图绘制到智能城市应用
开发语言·python·数据分析
奇舞精选10 小时前
爬虫入门
爬虫·python
爬虫程序猿10 小时前
利用 Python 爬虫获取 1688 商品详情 API 返回值说明(代码示例)实战指南
开发语言·爬虫·python
明月看潮生11 小时前
编程与数学 02-017 Python 面向对象编程 23课题、测试面向对象的程序
开发语言·python·青少年编程·面向对象·编程与数学
小蒜学长12 小时前
基于django的梧桐山水智慧旅游平台设计与开发(代码+数据库+LW)
java·spring boot·后端·python·django·旅游
nightunderblackcat12 小时前
新手向:Python开发简易股票价格追踪器
开发语言·python
感哥13 小时前
DRF 认证
python·django