数组切片的基本内存地址问题

问题描述

做一些关于 Python 数组切片的基本实验。为什么同一层有相同的id(地址),但数组值不同。是 Python 切片的机制,还是 id() 的工作原理?

a = [1,2,3,4,5,6]
def test2(a,level):
    if not a: return
    mid = len(a) // 2
    print(level,a,id(a))

    if len(a) > 1:
        test2(a[:mid],level + 1)
        test2(a[mid:],level + 1)
test2(a,0)


## Result:
# 0 [1,6] 4565360520
# 1 [1,3] 4565360456
# 2 [1] 4566307656
# 2 [2,3] 4566307656
# 3 [2] 4566307592
# 3 [3] 4566307592
# 1 [4,6] 4565360456
# 2 [4] 4566307656
# 2 [5,6] 4566307656
# 3 [5] 4566307592
# 3 [6] 4566307592
## Same level has same id??

然后,当我将 [level,id(a)] 附加到堆栈中时,然后将其打印出来。 同一个级别现在有不同的id。不管我什么时候在函数里打印出来,或者存入栈,然后一一打印出来。

a = [1,6]
stack = []
def test2(a,id(a))
    stack.append([level,id(a)])
    if len(a) > 1:
        test2(a[:mid],0)

print("-----------------")
stack = sorted(stack)
for i in stack:
    print(i)

'''
0 [1,6] 4393918344
1 [1,3] 4394865352
2 [1] 4394510088
2 [2,3] 4394865608
3 [2] 4394867592
3 [3] 4394867656
1 [4,6] 4394867912
2 [4] 4394868040
2 [5,6] 4394868168
3 [5] 4394867720
3 [6] 4394868360
-----------------
[0,[1,6],4393918344]
[1,3],4394865352]
[1,[4,4394867912]
[2,[1],4394510088]
[2,[2,4394865608]
[2,[4],4394868040]
[2,[5,4394868168]
[3,[2],4394867592]
[3,[3],4394867656]
[3,[5],4394867720]
[3,[6],4394868360]
'''

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)