我想从下面的代码中获取有关我的问题的建议。我声明了一些全局变量(例如shelfDim
,a
,b
,c
,d
,productList
)。然后将这些全局变量用作我的2个函数(packByLength
,packByWidth
)中的默认参数。
作为函数packByWidth()
的一部分,某些参数已更改。例如,我创建了一个新列表newDim
,它基本上是productList
的副本。然后,该函数通过交换一些元素来修改此列表。问题是,由于运行此函数,我的全局变量随后被更改。因此,一次调用packByWidth()
会给出正确的答案,而第二次调用会给我错误的答案(因为全局变量是在第一次调用时更改的)。
我知道对于python,何时
a=[1,2,3]
b=a
b[0]=2
a
和b
都将更改为[2,2,3]
。但是,我不希望这种情况发生,因为我的列表操作包含在一个函数中。
谁能告诉我是什么导致了这种行为,可以采取什么措施来防止这种情况发生?无论我运行函数多少次,我都希望我的全局变量保持不变! P.s.我曾尝试在全局变量中使用元组,但并没有帮助。谢谢!
import numpy as np
# Parameters
shelfDim = [100, 120, 150]
a = [15, 4, 30]
b = [11, 8, 12]
c = [5, 3.5, 18]
d = [23, 6.8, 10]
productList = [a, b, c, d]
# 1 All products to be aligned length-wise (assuming product must be placed upright)
def packByLength(products = productList, shelfDim = shelfDim):
usableProdSpace =list(shelfDim)
usableProdSpace[0] = usableProdSpace[0]/len(products)
totalQty = []
for product in products:
packableQty = []
for dim in range(3):
packableQty.append(usableProdSpace[dim]//product[dim])
totalQty.append(packableQty)
return totalQty
# 2 All products to be aligned width-wise (assuming product must be placed upright)
def packByWidth(products = productList, shelfDim = shelfDim):
swap = None
newDim = list(products)
for product in newDim:
swap = product[0]
product[0] = product[1]
product[1] = swap
print ('products', products)
print ('newDim', newDim)
totalQty = packByLength(products = newDim)
return totalQty