以下代码打印“原始值”。我想在列表中存储对字符串的引用,以便存储在列表中的字符串和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中完成的东西?
答案 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'