python:我的函数会无缘无故地更改参数
我有这个功能:python:我的函数会无缘无故地更改参数,python,arrays,function,global,Python,Arrays,Function,Global,我有这个功能: def change_position(old_particles): inc_r=0.5 inc_angle=0.5 N=len(old_particles) particlesx=old_particles a=random.randint(0,N-1) b=random.randint(0,1) max_angle=np.pi*2 c=random.randint(0,1) print 'old_par
def change_position(old_particles):
inc_r=0.5
inc_angle=0.5
N=len(old_particles)
particlesx=old_particles
a=random.randint(0,N-1)
b=random.randint(0,1)
max_angle=np.pi*2
c=random.randint(0,1)
print 'old_particles before change', old_particles
print 'new before change', particlesx
if b==1:
if c==1:
particlesx[a][b]=particlesx[a][b]+inc_angle
if particlesx[a][b]>max_angle:
particlesx[a][b]=particlesx[a][b]-max_angle
print 'cambiamos particula',a, particlesx[a][b]
if b==1:
if c==0:
particlesx[a][b]=particlesx[a][b]-inc_angle
if particlesx[a][b]<0:
particlesx[a][b]=particlesx[a][b]+max_angle
print 'cambiamos',a, particlesx[a][b]
if b==0:
if c==0:
particlesx[a][b]=particlesx[a][b]+inc_r
if particlesx[a][b]>1:
particlesx[a][b]=particlesx[a][b]-inc_r
print 'cambiamos',a, particlesx[a][b]
if b==0:
if c==1:
particlesx[a][b]=particlesx[a][b]-inc_r
if particlesx[a][b]<0:
particlesx[a][b]=particlesx[a][b]+inc_r
print 'cambiamos',a, particlesx[a][b]
print'after change', particlesx
print'old_particles after change', old_particles
return particlesx, a
def更改位置(旧粒子):
inc_r=0.5
夹角=0.5
N=len(旧粒子)
particlesx=旧粒子
a=随机随机随机数(0,N-1)
b=随机随机随机数(0,1)
最大角度=np.pi*2
c=随机随机随机数(0,1)
打印“更改前的旧粒子”,旧粒子
打印“更改前新建”,particlesx
如果b==1:
如果c==1:
particlesx[a][b]=particlesx[a][b]+夹角
如果particlesx[a][b]>最大角度:
particlesx[a][b]=particlesx[a][b]-最大角度
打印“cambiamos particula”,a,particlesx[a][b]
如果b==1:
如果c==0:
particlesx[a][b]=particlesx[a][b]-夹角
如果分词x[a][b]1:
particlesx[a][b]=particlesx[a][b]-inc\r
打印“cambiamos”,a,particlesx[a][b]
如果b==0:
如果c==1:
particlesx[a][b]=particlesx[a][b]-inc\r
如果particlesx[a][b]如下:
particlesx=old_particles
不制作列表的副本。相反,它使particlesx
和old_particles
引用同一个列表。当你改变一个,他们都改变
要使两者相互独立,您需要制作一份副本:
import copy
...
particlesx = copy.deepcopy(old_particles)
例如:如果您认为类中的元素是不可变的,那么您也可以使用语法new\u p=old\u p[:]@Ant:在这里,它们不是(元素似乎是列表本身)。因此,我建议使用deepcopy()
。