[问题] Python 使用其它矩阵时会更改原始矩阵?

楼主: dogs1231992 (河豚)   2019-01-08 05:39:21
大家好,小弟最近遇到一个超出我先前对于程式语言理解的问题
我在使用分子模拟软件 ase 时,设定Total_images为我的资料
然后用变量 test_a 跟 test_b 来复制Total_images
test_a = Total_images
test_b = Total_images
接着我希望更改 test_b 里面的部分资料
arr = []
for i in range(0,len(test_b)):
for j in range(0,len(test_b[i])):
arr = arr+[(j,j,j)]
test_b[i].set_positions(arr)
arr=[]
基本上就只有这几行程式码,我在for loop前后各自摆上一个
print Total_images[0].get_positions()
结果印出了不一样的东西,也就是说原本的Total_images也被重设部分资料了
这个导致我后面的计算直接跳出错误
除了检查 test_b 跟 Total_images以外,我还发现 test_a 也是整个被改变了
不知各位是否曾经遇过这种问题呢?
是不是我在哪边设定错了?
我的理解是,我把 Total_images 复制一份后放到 test_b 里面
此时 test_b 不管怎么弄,都不应该会影响到 Total_images 才对吧?
还希望前辈们多多指点,谢谢 :)
补充:
我刚才发现,资料错了就算了,印出来的东西还有漏
依照上面的设定,数据应该会变成 0 0 0 到 65 65 65才对
[[ 0. 0. 0. ]
[ 1. 1. 1. ]
[ 2. 2. 2. ]
[ 3. 3. 3. ]
[ 4. 4. 4. ]
[ 5. 5. 5. ]
[ 6. 6. 6. ]
[ 7. 7. 7. ]
[ 0. 0. 25.82318415]
[ 2.95358503 0. 25.82318415]
[ 1.47679251 2.55787966 25.82318415]
[ 4.43037754 2.55787966 25.82318415]
[ 12. 12. 12. ]
[ 13. 13. 13. ]
[ 14. 14. 14. ]
[ 15. 15. 15. ]
[ 16. 16. 16. ]
[ 17. 17. 17. ]
[ 18. 18. 18. ]
[ 19. 19. 19. ]
[ 20. 20. 20. ]
[ 21. 21. 21. ]
[ 22. 22. 22. ]
[ 23. 23. 23. ]
[ 24. 24. 24. ]
[ 25. 25. 25. ]
[ 26. 26. 26. ]
[ 27. 27. 27. ]
[ 28. 28. 28. ]
[ 29. 29. 29. ]
[ 30. 30. 30. ]
[ 31. 31. 31. ]
[ 32. 32. 32. ]
[ 33. 33. 33. ]
[ 34. 34. 34. ]
[ 35. 35. 35. ]
[ 36. 36. 36. ]
[ 37. 37. 37. ]
[ 38. 38. 38. ]
[ 39. 39. 39. ]
[ 40. 40. 40. ]
[ 41. 41. 41. ]
[ 42. 42. 42. ]
[ 43. 43. 43. ]
[ 44. 44. 44. ]
[ 45. 45. 45. ]
[ 46. 46. 46. ]
[ 47. 47. 47. ]
[ 48. 48. 48. ]
[ 49. 49. 49. ]
[ 50. 50. 50. ]
[ 51. 51. 51. ]
[ 52. 52. 52. ]
[ 53. 53. 53. ]
[ 54. 54. 54. ]
[ 55. 55. 55. ]
[ 56. 56. 56. ]
[ 57. 57. 57. ]
[ 58. 58. 58. ]
[ 59. 59. 59. ]
[ 60. 60. 60. ]
[ 61. 61. 61. ]
[ 62. 62. 62. ]
[ 63. 63. 63. ]
[ 64. 64. 64. ]
[ 65. 65. 65. ]]
作者: Angesi (小云豹)   2019-01-10 09:39:00
深深觉得你要学C 这观念是C的pointer
作者: vfgce (小兵)   2019-01-09 18:28:00
学一下numpy吧, list用来操作二维以上阵列很不方便
楼主: dogs1231992 (河豚)   2019-01-08 06:48:00
找到解答了,要用 deepcopyfrom copy import deepcopy
作者: anotherday   2019-01-08 10:34:00
也可以这么做 test_b = test_a[:]喔 我错了 你的list里还有资料结构 用你的方法是对的
作者: germun (ger)   2019-01-08 10:59:00
因为python的等号不是复制 你个三个name都是同一个空间
作者: f496328mm (为什么会流泪)   2019-01-08 20:32:00
你去看 C 就知道了他是存内存位址,省空间

Links booklink

Contact Us: admin [ a t ] ucptt.com