I have this object ,which I label as the parent object, and I want to create a copy of that object which I call the child (method generate children).I implemented the copy by passing attributes of the parent to the constructor when I instantiated the child. The problem I keep encountering is that when I edit the child by calling an update method, the same modification happens to the parent. I need the parent to stay unchanged to give way to more copies, what could be the problem here? Any help appreciated :)
import javax.swing.*;
import java.util.*;
public class State
{
    private int[][] switches;
    private int[][] lights;
    private int numMoves;
public State(int[][] initSwitches,int[][] initLights,int numMoves)
{
    this.switches = initSwitches;
    this.lights = initLights;
    this.numMoves = numMoves;
}
public int[][] getSwitches()
{
    return switches;
}
public int[][] getLights()
{
    return lights;
}
public int getNumMoves()
{
    return numMoves;
}
public void updateState(int row, int col)
{
    this.toggleSwitch(row,col);
    this.toggleLight(row,col);
    if(row+1 <= 4)
    {
        this.toggleLight(row+1,col);
    } 
    if(row-1 >= 0)
    {
        this.toggleLight(row-1,col);
    }
    if(col+1 <= 4)
    {
        this.toggleLight(row,col+1);
    } 
    if(col-1 >= 0)
    {
        this.toggleLight(row,col-1);
    } 
}
public void toggleSwitch(int row, int col)
{
    if(this.switches[row][col] == 1)
    {
        this.switches[row][col] = 0;
    }
    else if(this.switches[row][col] == 0)
    {
        this.switches[row][col] = 1;
    }
}
public void toggleLight(int row,int col)
{
    if(this.lights[row][col] == 1)
    {
        this.lights[row][col] = 0;
    }
    else if(this.lights[row][col] == 0)
    {
        this.lights[row][col] = 1;
    }
}
public State[] generateChildren(int numChildren)
{
    int count = 0;
    State[] children = new State[numChildren];
    for(int i=0;i<numChildren;i+=1)
    {
        children[i] = new State(this.switches,this.lights,0);
    }       
    for(int i=0;i<5;i+=1)
    {
        for(int j=0;j<5;j+=1)
        {
            if(this.switches[i][j] == 0)
            {
                children[count].updateState(i,j);
                LightsOutSolver.printState(children[count]);
                count+=1;
            }
        }
    }
    return children;    
}   
 }
 
     
    