'Only the first array inside a 2D array being updated by function

I have written this code below to create a randomised sudoku puzzle grid:

import time
import random
import math

sudoLine = [0,0,0,0,0,0,0,0,0]

#Creating mainGrid, this is a blank sudoku grid which I will place the contents of the possibleNums array into in a random order for each line.
mainGrid = [

    [0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0],

]

possibleNums = [1,2,3,4,5,6,7,8,9]
i = 0

#Grabbing the length of the possibleNums array and reducing it by 1 to get the index position of the last element.
length = len(possibleNums) - 1

def LineFill(line,nums,count):
    length = len(nums) - 1
    i = 0
    while length > 0:
        length = len(nums) - 1
        r = random.randint(0,length)
        line[i] = nums[r]
        nums.pop(r)
        i += 1
    return line

n=0

This while loop is then below that, and cycles through mainGrid, changing the array that is being filled each time:

while n in range(0,len(mainGrid)):
    mainGrid[n] = LineFill(mainGrid[n],possibleNums,i)
    n += 1

print(mainGrid)

When I run it, only the first line of the sudoku grid is filled, meaning only the first array in the list is being updated, even though the while loop should cycle through them all.

Could someone please point out the error in my logic?

Thanks.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source