Python 类链接列表
我有一个叫做Heap的类。在其中,我声明了三个独立的列表(最小列表、最大列表和异或列表)。当调用build_heap时,它会在一些初始输入列表上创建一个堆列表。然后,我将所有三个列表(min、max和xor)设置为堆列表。所以他们不应该以任何方式联系在一起。但当我做类似的事情时 self.min_列表[2]=“6” 它会更改所有三个列表。我的代码如下:Python 类链接列表,python,python-3.x,list,Python,Python 3.x,List,我有一个叫做Heap的类。在其中,我声明了三个独立的列表(最小列表、最大列表和异或列表)。当调用build_heap时,它会在一些初始输入列表上创建一个堆列表。然后,我将所有三个列表(min、max和xor)设置为堆列表。所以他们不应该以任何方式联系在一起。但当我做类似的事情时 self.min_列表[2]=“6” 它会更改所有三个列表。我的代码如下: class Heap: def __init__(self): self.heap_list = [None] self.cur
class Heap:
def __init__(self):
self.heap_list = [None]
self.currentSize = 0
self.alist = []
self.min_list = []
self.max_list = []
self.xor_list = []
self.i = 0
self.list_start = 0
self.SCA = 0
self.interval_to = 0 # interval in initial list, not in heap numbering
self.interval_from = 0
def build_heap(self, alist):
i = 0
self.alist = alist
while len(alist) > (2**i):
i += 1
self.i = i
self.list_start = (2**self.i)
for j in range(len(alist)):
self.heap_list.insert(self.list_start + j, alist[j])
for k in range((2**self.i)-1):
self.heap_list.insert(k, None)
# append None to list
# print(len(alist))
for l in range((2**self.i)-len(alist)):
# print("lol")
self.heap_list.append(None)
tup_list = self.heap_list
self.min_list = tup_list
self.max_list = tup_list
self.xor_list = tup_list
def smallest_common_ancestor(self):
bin_from = list(bin(int(self.interval_from) + int(self.list_start))[2:])
bin_to = list(bin(int(self.interval_to) + int(self.list_start))[2:])
smallest_common_ancestor = ""
p = 0
while len(bin_to) > p:
if bin_to[p] == bin_from[p]:
print(p)
smallest_common_ancestor = smallest_common_ancestor + str(bin_to[p])
p += 1
self.SCA = int(smallest_common_ancestor, 2)
def low_id(self):
print("Min_list before change: {}".format(self.min_list))
int_from = int(self.interval_from) + int(self.list_start)
int_to = int(self.interval_to) + int(self.list_start)
m = int_to // 2
while m + 1 != self.SCA:
if (m * 2) == int_to:
self.min_list[m] = self.min_list[(m * 2)]
elif ((m*2) + 1) == int_from:
self.min_list[m] = self.min_list[(m * 2) + 1]
elif self.min_list[m * 2] is None:
if self.min_list[(m * 2) + 1] is None:
self.min_list[m] = None
else:
self.min_list = self.min_list[(m * 2) + 1]
elif self.min_list[(m * 2) + 1] is None:
self.min_list[m] = self.min_list[m * 2]
elif int(self.min_list[m * 2]) >= int(self.min_list[(m * 2) + 1]):
self.min_list[m] = self.min_list[(m * 2) + 1]
else:
self.min_list[m] = self.min_list[(m * 2)]
m -= 1
return self.min_list[self.SCA]
在开始的时候,我按照这些思路做了一些事情,这不应该是问题的一部分
heap=heap()
heap.build\u堆(输入\u列表)
heap.interval\u to,heap.interval\u from=f.readline.split()
这是您的类“链接”列表的地方。Python是通过引用传递的,因此min\u list
,max\u list
,xor\u list
,tup\u list
和heap\u list
在调用build\u heap()
后都将指向同一个对象
要创建具有相同值的独立列表,需要显式复制它们:
new_list = list(old_list)
new_list = list(old_list)