如何将相同的列表对象分配给 python 中的两个不同的变量名称?
How do i assign same list object to two different variable names in python?
我一直在尝试解决我在高中收到的这个愚蠢的冒泡排序程序,我试图进行自动排序 class(查看代码)只是为了好玩,但是后来,有些东西困扰着我
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)
现在的问题是,每当我尝试将它分配给不同的变量时,传递给我的 class 和 'array' 的参数似乎指向相同的内存地址,但我需要做那是因为我需要 'unsorted' 名称不变 ,但是 python 将相同的内存地址分配给所有引用数组的名称给我带来了问题,未排序的名称总是会被修改并在最后进行了更改, ASA.unsorted 和 ASA.sorted 给出了相同的结果,其中我的数组是预先排序的
现在这个问题如果发生在主块中就不会发生,因为修改的 OGL 名称会为其分配一个单独的新内存地址,但这似乎不会发生在这里可能是由于某些原因class 东西。
所以这是我的问题:
我可以将两个不同的可变对象分配给 python 中的相同值吗(不使用像 OGL = array[::1] 这样愚蠢的旁路),如果可能的话,如何?
即使 OGL 被 bsort 的操作修改了,为什么我当前的代码中会发生这种情况,修改时不应该为它分配一个新的内存地址吗?
其他OOP语言如C++/Java是否也发生同样的情况?
要保持未排序的数组不被排序的数组进一步引用,那么您必须为此执行深层复制。
class AutoSortedArray:
def __init__(self, array):
self.lenarr = len(array)
self.unsorted = tuple(list(array).copy())
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)
我一直在尝试解决我在高中收到的这个愚蠢的冒泡排序程序,我试图进行自动排序 class(查看代码)只是为了好玩,但是后来,有些东西困扰着我
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)
现在的问题是,每当我尝试将它分配给不同的变量时,传递给我的 class 和 'array' 的参数似乎指向相同的内存地址,但我需要做那是因为我需要 'unsorted' 名称不变 ,但是 python 将相同的内存地址分配给所有引用数组的名称给我带来了问题,未排序的名称总是会被修改并在最后进行了更改, ASA.unsorted 和 ASA.sorted 给出了相同的结果,其中我的数组是预先排序的
现在这个问题如果发生在主块中就不会发生,因为修改的 OGL 名称会为其分配一个单独的新内存地址,但这似乎不会发生在这里可能是由于某些原因class 东西。
所以这是我的问题:
我可以将两个不同的可变对象分配给 python 中的相同值吗(不使用像 OGL = array[::1] 这样愚蠢的旁路),如果可能的话,如何?
即使 OGL 被 bsort 的操作修改了,为什么我当前的代码中会发生这种情况,修改时不应该为它分配一个新的内存地址吗?
其他OOP语言如C++/Java是否也发生同样的情况?
要保持未排序的数组不被排序的数组进一步引用,那么您必须为此执行深层复制。
class AutoSortedArray:
def __init__(self, array):
self.lenarr = len(array)
self.unsorted = tuple(list(array).copy())
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)