[英]Python referring to an item in a list from another list
我有一个来自另一个列表(listB)的变量列表(listA)。 我遇到的问题是listB中的项目是通过值传递给listA而不是通过引用。 无论如何,在将其值放入listA后,我可以访问listB中的对象吗?
例如:
listB = [1,2,3,4,5]
listA = [listB[0], listB[1]]
listA[0] = 0
这使listA等于[0,2],并使listB保持不变。 我想修改listB,使其成为[0,2,3,4,5]。
我当然想出了一个解决方案,但它的丑陋,我想知道是否有一种优雅的方式来做到这一点。
python中的所有内容都是一个参考。 执行listB[1]
所有这些语句后, listB[1]
和listA[1]
实际上是同一个对象。 (您可以通过调用id(listB[1])
和id(listA[1])
。
listA[0]
和listB[0]
不同的原因仅仅是因为你将不同的引用放入该位置。
从您的描述来看,您不希望listA
存储对listA
中对象的listB
。 你需要的是一个listA
是景色 listB
。 我相信你只有两个选择:
创建一个特殊的序列,在内部存储对listA
的引用,其__getitem__
和__setitem__
方法在调用时执行查找到listA
。
创建特殊的特殊引用类型,其中包含“序列和索引”之类的内容。 将这些引用放入listA
。 但是,要通过listA
修改listB
,您必须调用这些引用对象的某种“get”和“set”成员。
你不能。 首先,整数是不可变的,它们不像C / C ++中的整数那样工作。 你不能获得一个整数的指针/引用然后改变它(我的意思是你可以,你总是有一个引用,但它通常引用一个对象;检查这个x = 1; y = 1; print id(x), id(y)
; id值应该相同,它们是内存地址)。 你可以做的是获取listB中的元素索引并更改列表,例如:
listA = [0, 1]
listB[listA[0]] = 0
但是你可能正在尝试做一些你不应该做的事情,因为Python的工作方式与C ++不同。 你想要实现什么目标?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.