我的字典具有以下结构:
a = 'stringA'
b = 'stringB'
c = 'stringC'
endpoints = {
'foo1': a + 'string1' + b,
'foo2' : a + 'string2' + c + 'string3' + b,
}
我的问题如下:当我调用endpoints['foo2']
时,我得到了预期的数组值。但是,当我在数组声明和 endpoints['foo2']
的使用之间更改例如 c
的值时,c< 的值
未更新。
知道为什么会发生这种情况以及如何解决吗?
PS:我知道这可以通过创建一个简单的函数来完成,但我认为这会非常低效。
最佳答案
你可以这样做:
a = ['stringA']
b = ['stringB']
c = ['stringC']
endpoints = {
'foo1': a ,
'foo2' : b
}
print(endpoints['foo1']) #returns "[stringA]"
a[0]='otherString'
print(endpoints['foo1']) #returns "[otherString]"
您可以这样做,因为您可以更改列表中的值而不更改引用;
a
和 endpoints
仍然为 a
使用相同的空间
这对于纯字符串来说是不可能的,因为如果没有新的分配,您就无法更改它们。 Python 中的字符串是不可变的。
编辑:另一种可能性是创建您自己的字符串类。
这会删除[]
括号:
class MyStr:
def __init__(self,val):
self.val=val
def __repr__(self):
#this function is called by dict to get a string for the class
return self.val
def setVal(self,val):
self.val=val
a=MyStr("abcd")
b={1:a}
print(b) #prints {1:"abcd"}
a.setVal("cdef")
print(b) #prints {1:"cdef"}
免责声明:正如评论中所解释的,我仍在使用 python 2.7
虽然 Python 3 和 2.7 大部分兼容,但在尝试使用它时可能会出现一些较小的错误。
关于python - 先进的阵列结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36259740/