When you call assemble_system, it applies boundary conditions in a symmetric fashion. This means that instead of only setting the bc rows to an identity/multiple of identity row.
One instead uses lifting, which results in a Matrix where all bc entries are discoupled, and is instead added in the rhs ( b-=Ag) where g is equal to the DirichletBC at respective dofs, 0 otherwise.