BleepingComputer.com: Python Array Copying

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Python Array Copying

#1 User is offline   PropagandaPanda 

  • PipPipPipPipPipPip
  • Find Topics
  • Group: Malware Response Instructor
  • Posts: 9,330
  • Joined: 10-March 08
  • Gender:Male

Posted 16 October 2009 - 10:04 PM

Hello.

I'm having some trouble with arrays in Python. From what I understand, when a statement such as the one below is used, the NewArray does not contain a copy of the OldArray, but any references to NewArray are simply redirected to OldArray.
NewArray = OldArray


This is demontrated:
Array = [1,1,1,1,1,1]
Arr2 = Array
Array[0] = 99
print Arr2

returns [99, 1, 1, 1, 1, 1]

I can work around this by doing such.
Array = [1,1,1,1,1,1]
Arr2 = Array[:]
Array[0] = 99
print Arr2


This doesn't work when I want to call a function that has an array as an argument.
def MakeMove(Board,Rows,Marker,Move):
	Board = Board[:]
	for i in range(0,Rows):
		i = (Rows-1)-i
		if Board[i][Move]==".":
			Board[i][Move] = Marker
			break
	return Board
(Function from a connect 4 game)

Normally, I would use this to actually change the board, in which case it works well.

However, when I want to test a potential new move using this function, it still alters the argument passed to it.

For instance:
TestBoard = MakeMove(TheBoard[:],Rows,Marker,Move)
TheBoard variable is changed.

Is there some way to avoid this?

Thanks,
The Panda

#2 User is offline   Romeo29 

  • Learning To Bleep
  • PipPipPipPipPipPip
  • Find Topics
  • Group: BC Advisor
  • Posts: 2,834
  • Joined: 06-July 08
  • Gender:Not Telling
  • Location:127.0.0.1

Posted 17 October 2009 - 09:08 AM

Try changing the variable names as shown in bold:

def MakeMove(Bord,Rows,Marker,Move):
Board = Bord[:]

#3 User is offline   PropagandaPanda 

  • PipPipPipPipPipPip
  • Find Topics
  • Group: Malware Response Instructor
  • Posts: 9,330
  • Joined: 10-March 08
  • Gender:Male

Posted 17 October 2009 - 10:06 AM

Thanks, but I figured it out :thumbsup: .

Quote

import copy
MakeMove(copy.deepcopy(Board),Rows,Marker,Move):


I tried changing the variable name yesterday, but it didn't work.

With Regards,
The Panda

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users