Python存储动态数据

Python存储动态数据,python,Python,我不知道标题是否有意义。。。但这正是我使用列表所要做的 >>> x = 5 >>> l = [x] >>> l [5] >>> x = 6 >>> l [5] # I want l to automatically get updated and wish to see [6] >>> dict和tuple也是如此。是否有一个python对象可以存储变量的动态值 谢谢,变量是存储数据的


我不知道标题是否有意义。。。但这正是我使用列表所要做的

>>> x = 5
>>> l = [x]
>>> l
[5]
>>> x = 6
>>> l
[5] # I want l to automatically get updated and wish to see [6]
>>> 
dict和tuple也是如此。是否有一个python对象可以存储变量的动态值


谢谢,

变量是存储数据的地方。数据结构是存储数据的地方。选择一个符合您需要的。

您可以使用
numpy
模块来完成

>>> from numpy import array
>>> a = array(5)
>>> a
array(5)
>>> l = [a]
>>> l
[array(5)]
>>> a.itemset(6)
>>> a
array(6)
>>> l
[array(6)]
通常,0-D numpy数组可以被视为任何常规值,如下所示:

>>> a + 3
9
但是,如果需要,可以按如下方式访问基础对象:

>>> a.item()
6

这里有一种黑客式的动态访问方法,它在给定的形式下不是非常可扩展/灵活,但可以作为更好的方法的基础

>>> a = 7
>>> class l:
    def a_get(self):
        global a
        return a
    def a_set(self, value):
        global a
        a = value
    a = property(a_get, a_set)


>>> c = l()
>>> c.a
7
>>> a = 4
>>> c.a
4
>>> c.a = 6
>>> a
6

由于赋值运算符在Python中的工作方式,无法使其工作
x=WHATEVER
将始终将本地名称
x
重新绑定到
WHATEVER
,而不修改以前绑定到的
x
(*)

您可以通过将整数替换为容器数据类型(如单元素列表)来解决此问题:

>>> x = [5]
>>> l = [x]
>>> l
[[5]]
>>> x[0] = 6
>>> l
[[6]]
但这真的是一个黑客,我不推荐它除了实验以外的任何东西


(*)当引用计数降至零时,重新绑定实际上可能会修改以前绑定的对象,例如,它可能会关闭文件。但是,您不应该依赖于此。

您试图解决的实际问题是什么?如果您想查看
x
的当前值,为什么不查看
x
?赋值运算符
=
将名称重新绑定到不同的对象。当对象的名称被指定给时,您不能创建一个不会发生这种情况的对象;这是基本语法,根本不是一回事。任何嵌套的数据结构都可以这样做,但大多数嵌套的数据结构并不像numpy那样提供混合numpy数组和常规数值对象的“粘合剂”。这就是为什么我特别使用
numpy
而不是像larsman那样使用常规列表的原因。是的,但是如果你使用
a=3
,会发生什么呢?当你将一个新项目分配给一个变量时,在任何其他不支持重载的语言中都会发生同样的事情。然而!如果愿意,可以使用Python提供属性访问的方式,并利用
property()
函数来做一些有趣的事情。请参阅我的更新答案,了解基本/黑客实现。我认为这是最接近OP所需的。与其说这是一个黑客,不如说这只是一个嵌套的数据结构。你也可以使用单级列表。@Marcin:我无法想象哪一个单元素列表是Pythonic解决方案的问题。我同意,但这并不意味着两级列表不能真正为你买一级列表不能买的东西。