lis到其他分配

2024-05-29 06:08:15 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有理由将一个列表分配给另一个列表并更改其中一个列表中的某个项目反映了两者的更改,但更改其中一个列表的整个列表并不能反映两者的更改?你知道吗

a=5
b=a
a=3
print b #this prints 5

spy = [0,0,7]
agent = spy
spy[2]=8
print agent #this prints [0,0,8]

spy = [0,0,7]
agent = spy
spy = "hello"
print agent #this prints [0,0,7]

Tags: 项目hello列表thisprintsagentprint理由
3条回答

你的第一个变异对象,你的第二个重新绑定名称。你知道吗

list其中spy包含)[2]=8

(名字叫做“间谍”)= "hello"

如果您忘记了关于指针、地址、按值传递和按引用传递的所有知识,并将其视为标签和对象,或者名称和对象,那么Python中的引用就更容易理解。你知道吗

遵循以下步骤:

a=5
b=a
a=3
print b #this prints 5

把标签“a”放在5上,然后把“b”放在同一个物体上,因此“a”是5。然后把‘a’去掉,放在3上b'仍在5上,将'a'移到其他位置不会影响它。你知道吗

spy = [0,0,7]

你把“间谍”的名字放在了一个名单上[0,0,7]

agent = spy

您已将名称“agent”放在相同的列表[0,0,7]

spy[2]=8
print agent #this prints [0,0,8]

将列表中的索引2标签放在8上。由于agent和spy都是同一个列表的名称,所以在打印时您将看到这两个名称的变化。你知道吗

spy = [0,0,7]

您在列表[0,0,7]中有“spy”名称

agent = spy

您在相同的列表[0,0,7]上有名称“agent”

spy = "hello"

现在你已经从列表中删除了“spy”这个名字,并添加了一个字符串“hello”。列表仍具有分配给它的“代理”标签。你知道吗

print agent #this prints [0,0,7]

明白了吗?你知道吗

当您将一个变量的列表分配给另一个变量时,则这两个变量都属于同一个列表。你知道吗

spy = [0,0,7]
agent = spy
spy[2]=8

所以这就是为什么你改变了间谍,所以代理也改变了,因为它们都属于同一个内存位置上的同一个列表。你可以查一下

id(spy)
id(agent)

那是参考电话。你知道吗

但如果在代理初始化后将新列表分配给spy,则spy属于另一个内存位置上的另一个列表。你知道吗

id(spy)
id(agent)

您还可以使用id()函数检查这一点,该函数提供内存中变量的引用id。你知道吗

相关问题 更多 >

    热门问题