Python在列表中更改对象

时间:2015-04-30 09:40:05

标签: python

这可能没什么意义,但我想更改以下内容以显示'x'而不是'a'

>>> a = "a"
>>> b = "b"
>>> c = "c"
>>> d = [a, b, c]
>>> d[0] = "x"
>>> a
'a'

是否有可能以某种方式出现这种行为?不仅是字符串,也适用于其他对象。

5 个答案:

答案 0 :(得分:1)

字符串在Python中是故意不可变的。

您的选择是将字符串存储在可变容器中,或者使用其他一些可变的数据类型。

此示例将每个字符串存储在可变容器(您自己的类或其他列表中)中。

a = ["a"]
b = ["b"]
c = ["c"]
d = [a, b, c]
d[0][0] = "x"
a = d[0][0]
print(a)

将打印"x"

但在这种情况下,bytearray可能是更好的选择。

a = bytearray(b'abc')
a[2] = ord(b'x')
a = chr(a[2])
print(a)

也会打印“x”。

答案 1 :(得分:0)

你实际做的是将a,b和c传递给d []作为参考。然后d指的是那些字符串而不是变量。

它并不关心a,b或c等于什么。您在注释中给出了一个示例,但实际上在运行时不起作用:

>>> a = "a"
>>> b = "b"
>>> c = "c"
>>> d = [a, b, c]
>>> a = "x"
>>> a
'x'
>>> d
['a', 'b', 'c']
>>> c = 12
>>> c
12
>>> d
['a', 'b', 'c']

答案 2 :(得分:0)

变量是对象的标签。

d是一个标签列表。

a是对象的标签。 'a'是一个不可变对象。如果您想更改a以显示'x',则必须更改其指向的内容:

>>> a = 'x'
>>> a
'x'

或者:

>>> a = d[0]
>>> a
'x'

答案 3 :(得分:0)

ax

a = "a"
b = "b"
c = "c"
d =[a,b,c]
d[0] = "x"
a = d[0]
print a

输出为x

答案 4 :(得分:0)

不,你不能,因为当你指定l=[a,b,c]时,你将a的值放在l中,而不是a

佩戴最接近的东西:

class ref:
    value=0
    def __init__(self,x):
        self.value=x
    def __repr__(self):
        return repr(self.value)

a=ref('a')
b=ref('b')
c=ref('c') 
l=[a,b,c]
l[0].value='x'
print(a)
>>>> 'x'