问题描述
做一些关于 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 (将#修改为@)