Difference between DiricheletBC.homogenize() and DiricheletBC.zero()

Hi, I was reading some tutorials and found for boundary conditions there is this bc.homogenize() and bc.zero().

For homogenize(), it says it sets value to zero.
For zero(), it says make rows of matrix associated with boundary condition zero. (From what I understood, is it used for matrix reduction after assemble for rows and columns given boundary condition? )

So lets say, I have linear system Ax = b

bc0 = bc.homogenize()
bc0.apply(A)
bc0 = bc.homogenize()
bc0.zero(A)
bc.apply(A)
bc.zero(A)

How these are different from each other?