将引用存储在列表中的字符串中

时间:2014-04-13 21:59:31

标签: python string object weak-references

以下代码打印“原始值”。我想在列表中存储对字符串的引用,以便存储在列表中的字符串和first_string始终指向同一个对象。我怎么能在python中做到这一点?我想存储一个引用,最好是列表中的弱引用。该列表应该是对不同类型对象的引用列表。我只是测试如何在python中做不同的事情以及可能的事情。它是否可以在python中实现?

my_list = []

first_string = 'original value'
my_list.append(first_string)

first_string = 'changed'

print(my_list[0])

应打印“已更改”。

...

我尝试使用以下方法获取对字符串的弱引用:

weakref.ref(first_string)

但显然不可能获得对字符串对象的弱引用。

cannot create weak reference to 'str' object

尽管存储id是一个坏主意(因为一个对象可以是CG,然后id可以指向另一个),我仍然尝试过:

import ctypes
my_list = []

first_string = 'original value'
my_list.append(id(first_string))

ctypes.cast(my_list[0], ctypes.py_object).value = 'changed value'

print(first_string)

它也没用。印刷的价值仍然是原始价值。那么它是不是可以在python中完成的东西?

1 个答案:

答案 0 :(得分:1)

你想在python中做什么只能使用 mutable 类型。如果两个“标签”引用相同的可变对象,则可以对一个标签执行操作,并且在访问另一个标签时将反映该操作,因为它是同一个对象。简而言之,将其包装在列表或类中 -

>>> class PyString:
    def __init__(self,string):
        self.string = string
>>> first_string = PyString("original_value")
>>> my_list = []
>>> my_list.append(first_string)
>>> first_string.string = "changed"
>>> my_list[0].string
'changed'