MachineGirl 发表于 2021-1-9 19:19:58

Python 数组复制,赋值问题

def Move(Input,Info,Times):
    MoveR = Input.copy()
    if Info!=0 and Times == 0:
      MoveR]] = MoveR-1]]
      MoveR-1]] = 0
      print('0成功***************')
    elif Info!=0 and Times == 1:
      MoveR]] = MoveR+1]]
      MoveR+1]] = 0
      print('1成功***************')
      print(Input)
    elif Info!=0 and Times == 2:
      MoveR]] = MoveR]-1]
      MoveR]-1] = 0
      print('2成功***************')
    elif Info!=0 and Times == 3:
      MoveR]] = MoveR]+1]
      MoveR]+1] = 0
      print('3成功***************')
    return MoveR

这是我写的函数,
测试结果:作为形参传进来的数据跑完之后数值发生改变,就MoveR变了,但是Input也发生了改变,而且在外边作为形参传进来的数据也发生了改变,就好像绑在一起了,求大佬解答疑惑!!!!!!!!!!!!!

MachineGirl 发表于 2021-1-9 19:21:21

在函数中print(Input)处就发生变化了

逃兵 发表于 2021-1-9 19:28:40

给个实例

MachineGirl 发表于 2021-1-9 19:36:07

逃兵 发表于 2021-1-9 19:28
给个实例

def Move(Input,Info,Times):
    MoveR = Input.copy()
    if Info!=0 and Times == 0:
      MoveR]] = MoveR-1]]
      MoveR-1]] = 0
      print('0成功***************')
    elif Info!=0 and Times == 1:
      MoveR]] = MoveR+1]]
      MoveR+1]] = 0
      print('1成功***************')
      print(Input)
    elif Info!=0 and Times == 2:
      MoveR]] = MoveR]-1]
      MoveR]-1] = 0
      print('2成功***************')
    elif Info!=0 and Times == 3:
      MoveR]] = MoveR]+1]
      MoveR]+1] = 0
      print('3成功***************')
    return MoveR

Database = []
Tempbase = []
Compl = 0
Input = input('输入初始状态(例如:102345678):')
Target = input('输入目标状态(例如:142375608):')
Tempbase.append(Change(Input))
Database = Tempbase.copy()
while Compl == 0:
    Testbase = Tempbase.copy()
    Tempbase.clear()
    for i in range(len(Testbase)):
      Info = Move_Prac(Testbase)
      for Times in range(4):
            MoveResult = Move(Testbase,Info,Times)
            print(MoveResult)
            if MoveResult != Testbase:
                Contrast(Moveresult,Target)
                WriteIn(Moveresult,Target)

不知道需要多少,其他函数没有用到这个Testbase就不放出来了(太长)
永远都进不去最后一个if,他们数值在经过Move函数之后永远一样

MachineGirl 发表于 2021-1-9 19:47:23

提点可能性康康也行,拜托大家了,我完全没搞懂这是什么情况

MachineGirl 发表于 2021-1-9 20:10:13

-00-问题我自己解决了,是复制深度的问题,虽然不知道为什么,但是二维数组过去用深复制能够解决这个问题

bhcqzf 发表于 2021-1-13 11:35:02

不懂帮顶

Cool_Breeze 发表于 2021-1-13 13:02:06

本帖最后由 Cool_Breeze 于 2021-1-13 13:04 编辑

# coding=utf-8
#!/usr/bin/env python3
import copy

def Move(a):
    a = 2
    print(a)


a = [[]]
Move(copy.deepcopy(a))
print(a)

心驰神往 发表于 2021-1-13 13:21:28

{:10_275:}

Daniel_Zhang 发表于 2021-1-13 15:45:09

{:10_275:}

红桃J 发表于 2021-1-13 22:53:03

厉害

呆萌的月饼不呆 发表于 2021-1-14 08:10:57

MachineGirl 发表于 2021-1-14 16:26:17

Cool_Breeze 发表于 2021-1-13 13:02


是的,就是这样,我也是用了deepcopy就能解决这个问题!

SomeThing9 发表于 2021-1-14 16:35:41

Z真厉害

Daniel_Zhang 发表于 2021-1-14 16:36:20

{:10_256:}

结贴撒花

页川 发表于 2021-1-21 11:28:16

不懂帮顶+1

SomeThing9 发表于 2021-1-21 11:57:54

我来白嫖一下渔币

SomeThing9 发表于 2021-1-21 11:58:29

{:10_254:}{:10_256:}

qq1151985918 发表于 2021-1-21 12:22:45

{:9_227:}
页: [1]
查看完整版本: Python 数组复制,赋值问题