Python函数设置变量出乎意料



我正在尝试编码一个排序功能程序,但是我遇到了一个问题,在我认为不应该的情况下, randomdata变量正在更改。

下面的代码不会运行,因为合并排序导致randomdata出于没有明显的原因在2D列表中...

python为什么这样做的任何帮助将不胜感激!

from random import randint
from math import ceil
size = int(input("Sample size: "))
maximum = int(input("Range of numbers: "))
randomdata = [randint(0, maximum) for _ in range(size)]
print("DATA", randomdata)

def bubble(data):
    comparisons = 0
    length = len(data)
    for _ in range(length - 1):
        for i in range(length - 1):
            if data[i] > data[i+1]:
                hold = data[i]
                del data[i]
                data.insert(i+1, hold)
            comparisons += 1
    return comparisons, data
def mergefunction(data1, data2):
    if type(data1) != type([]):
        data1 = [data1]
    if type(data2) != type([]):
        data2 = [data2]
    comparisons = 0
    merged = list()
    while len(data1) > 0 and len(data2) > 0:
        #print("DATA 1", data1)
        #print("DATA 2", data2)
        if data1[0] < data2[0]:
            merged.append(data1[0])
            del data1[0]
        else:
            merged.append(data2[0])
            del data2[0]
        comparisons += 1
    merged += data1
    merged += data2
    #print("COMPS", comparisons)
    #print("SORT", merged)
    return comparisons, merged
def merge(data):
    comparisons = 0
    while len(data) > 1:
        #print("DATA", data)
        for i in range(0, ceil(len(data)/2), 1):
            #print("I", i)
            try:
                compadd, merged = mergefunction(data[i], data[i+1])
                del data[i], data[i]
                data.insert(i, merged)
                comparisons += compadd
            except IndexError:
                pass
    return comparisons, data[0]
def insrt(data):
    sorteddata = [-10000000]
    comparisons = 0
    for item in data:
        print("ITEM", item)
        for i in range(len(sorteddata)):
            #print(item, sorteddata[i])
            if item > sorteddata[i]:
                sorteddata.insert(i+1, item)
                comparisons += 1
                break
            comparisons += 1
    del sorteddata[0]
    print(sorteddata)
    return comparisons, sorteddata
print("="*10,"BUBBLE","="*10)
print("RANDOM", randomdata)
comps, data = bubble(randomdata)
print("COMPARISONS", comps)
print("SORTED DATA", data)
print("="*10,"MERGE","="*10)
print("RANDOM", randomdata)
comps, data = merge(randomdata)
print("COMPARISONS", comps)
print("SORTED DATA", data)
print("="*10,"INSERT","="*10)
print("RANDOM", randomdata)
comps, data = insrt(randomdata)
print("COMPARISONS", comps)
print("SORTED DATA", data)

python 3.6.1抱歉,此代码与辩论者乱扔垃圾...

执行comps, data = bubble(randomdata)时,您将randomdata的引用传递给bubble(),因为randomdatalist,这意味着可变,然后您对data中的CC_8中的所有更改反映在randomdata中,。您需要使用randomdata的副本。类似:data = data[:] bublle()

最新更新