【发布时间】:2021-05-15 19:45:02
【问题描述】:
我一直在尝试解决我在高中时收到的这个愚蠢的气泡排序程序,我试图制作一个自动排序课程(参见代码)只是为了好玩,但是后来,有些事情让我很困扰
class AutoSortedArray:
def __init__(self, array):
self.lenarr = len(array)
self.unsorted = array
OGL = list(array)
self.sorted = self.bsort(OGL)
def bsort(self, array):
for i in range(self.lenarr):
for j in range(0, self.lenarr-i-1):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1], array[j]
return tuple(array)
if __name__=="__main__":
ASA=AutoSortedArray((5,8,2,1,3,6,4,7))
print(ASA.unsorted)
print(ASA.sorted)
现在的问题是,传递给我的类的参数“数组”似乎在我尝试将它分配给不同的变量时指向相同的内存地址,但我需要这样做,因为我需要 'unsorted' name untouched,但是 python 为所有引用数组的名称分配相同的内存地址给我带来了问题,unsorted 的名称最后总是被修改和改变,ASA.unsorted 和 ASA.sorted 都给出了我的数组预排序的结果相同
现在,如果它发生在主块中,则不会发生此问题,因为被修改的 OGL 名称会为其分配一个单独的新内存地址,但这似乎不会在这里发生,可能是由于某些类的事情.
所以这是我的问题:
-
我可以在 python 中将两个不同的可变对象分配给相同的值吗(不使用像 OGL = array[::1] 这样的愚蠢绕过),如果可能的话,如何?
-
为什么在我当前的代码中会发生这种情况,即使 OGL 被 bsort 的操作修改了,是否应该在修改时为其分配一个新的内存地址?
-
在 C++/Java 等其他 OOP 语言中是否也会发生同样的情况?
【问题讨论】:
标签: python python-3.x inheritance memory-management namespaces