如何解决为什么列表copy向在python中包含自身的数组添加额外的维度?
我正在尝试使用列表中的列表,但我发现此属性非常奇怪,无法真正理解发生这种情况的原因:
因此,当python在打印时确定列表包含自身时,将使用以下表示法:[[...]]
然后我创建了一个简单的程序来打印该行:
arr = []
arr.append(arr)
print(arr)
输出:
[[...]]
然后我走得更远,并将列表追加两次,毫不奇怪,我得到了一个包含两个包含自身的元素的数组:
arr = []
arr.append(arr)
print(arr)
print('********')
arr.append(arr)
print(arr)
输出:
[[...]]
********
[[...],[...]]
在那之后,我决定看看这些无限数组的浅表是什么样子,我感到非常惊讶,无法解释这种现象:
arr = []
arr.append(arr)
print(arr)
print(arr.copy())
print('********')
arr.append(arr)
print(arr)
print(arr.copy())
[[...]]
[[[...]]]
********
[[...],[...]]
[[[...],[...]],[[...],[...]]]
这是怎么回事?这会产生额外的尺寸?
在我看来,从几何学上来说,好像copy()创建了与原始数组相同的结构,然后在应该放置元素引用的地方,实际上放置了整个原始对象的引用!
我的意思是
对于第一个元素,让我们假设对象[[...]]
的引用为0x11AA,因此,copy将其结构创建为原始结构的副本(例如,星号作为对象引用的可见占位符,例如) :[*]
(一个包含一个元素的列表),然后,它为星号提供对象[[...]]
的引用,得到[[[...]]]
。
第二,复制的结构看起来像:[*,*]
(一个包含两个元素的列表),然后,将整个对象[[...],[...]]
的引用赋予每个元素(星号)。
为什么这样?
我真的很困惑,不明白为什么会有这种行为?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。