class MyClass:
def __init__(self, a):
self.a = a
def append(some_list):
some_list.append(["d"])
foo =[["a"],["b"],["c"]]
bar = foo
my_class = MyClass(foo)
append(bar)
for item in bar:
item[0] += "x"
letters = item[0]
letters += "z"
print (my_class.a)
产生输出
[['ax'], ['bx'], ['cx'], ['dx']]
这个例子中发生了很多事情,我对所有这些都感觉很好,除了我希望"z"也被标记到字符串上,但事实并非如此。
有人能解释为什么字符串中不包含"z"是有意义的吗?
我认为索引会返回带有字符串的"容器",然后附加"z"会改变存储的字符串。显然,一个独特的"容器"是如何制造的,但我不明白为什么。
(如果附加到字符串后生成一个新的字符串,我不知道为什么我测试的整数也会发生同样的行为…使用浮点会有不同的结果吗?(
这是因为可变对象。例如
>>>l1 = [1,2,3]
>>>l2 = l1
>>>l2[0]=4
>>>print(l1[0])
4
在该示例中,l1
和l2
指向相同的存储器位置。要将l1
创建为l2
的副本,请使用copy()
:
>>>l1 = [1,2,3]
>>>l2 = l1.copy()
>>>l2[0]=4
>>>print(l1[0])
1
>>>print(l2[0])
4
编辑:根据建议更改解释。
在您的示例中,foo
和bar
指向相同的内存位置:您在foo
中更改的内容也在bar
中更改。为什么它不附加";z";是因为letters
是一个声明的变量,其值为item[0]
,但它没有发生变化。如果是print(letters)
,它将打印"dz"
。