python:我的函数会无缘无故地更改参数

2024-10-01 07:30:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个功能:

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 

问题是,由于我不明白的原因,函数不仅改变了'particlesx'的值,而且也改变了旧粒子的值,因此脚本末尾的两个数组的值不仅在函数中是相同的,而且在函数外部也是相同的。有人能帮我吗? 谢谢您!你知道吗


Tags: 函数ifrandomchangeoldmaxincprint
1条回答
网友
1楼 · 发布于 2024-10-01 07:30:35

以下内容:

particlesx=old_particles

不复制列表。相反,它使particlesxold_particles引用相同的列表。当你换了一个,他们都变了。你知道吗

要使两者相互独立,您需要制作一个副本:

import copy
...
particlesx = copy.deepcopy(old_particles)

相关问题 更多 >