gpt4 book ai didi

Python - 如何区分指向同一对象的两个列表元素?

转载 作者:太空狗 更新时间:2023-10-30 02:14:08 25 4
gpt4 key购买 nike

我有一个 Ring 结构实现如下(基于我找到的食谱):

class Ring(list):

def turn(self):
last = self.pop(0)
self.append(last)

def setTop(self, objectReference):
if objectReference not in self:
raise ValueError, "object is not in ring"

while self[0] is not objectReference:
self.turn()

假设我做了以下事情:

x = Ring([1,2,3,4,4])
x.setTop(4)

我的代码总是将前 4 个(当前为 x[3])设置为 x[0]。看起来(通过 x[3] 和 x[4] 之间的对象身份和哈希 ID 测试)Python 正在重用 4 对象。

我如何告诉 Python 我真的希望第二个 4(当前为 x[4])位于顶部?

对这个基本问题表示歉意......成为自学初学者的失败之一。

谢谢,

迈克

===编辑===

为了它的值(value),我从类中删除了 setTop 方法。我把它添加到标准食谱中,想着“嘿,这会很整洁,可能会有用。”正如答案(尤其是“有什么区别”,这是正确的)和我自己使用该结构的经验所表明的,这是一种不支持我的任何用例的蹩脚方法。

换句话说,添加一些东西是因为我可以而不是满足需求 = 失败。

最佳答案

来自 Learning Python,第 4 版 -- 第 6 章:

At least conceptually, each time you generate a new value in your script by running an expression, Python creates a new object (i.e., a chunk of memory) to represent that value. Internally, as an optimization, Python caches and reuses certain kinds of un- changeable objects, such as small integers and strings (each 0 is not really a new piece of memory—more on this caching behavior later). But, from a logical perspective, it works as though each expression’s result value is a distinct object and each object is a distinct piece of memory.

问题是..

if x[3] is x[4]:
print "What's the difference?"

关于Python - 如何区分指向同一对象的两个列表元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3814843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com