Your code is flawed and not updating the geometry correctly. You need to build a NEW POLYGON and explicitly state it has Z values and insert that back into the FeatureClass. The following code updated my single part test data as expected: <!-- language: lang-py --> import arcpy fc = r"C:\Scratch\fGDB_Scratch.gdb\fcTest" # Get Spatial Reference of dataset desc = arcpy.Describe(fc) sr = desc.spatialReference with arcpy.da.UpdateCursor(fc, ["SHAPE@"]) as cursor: for row in cursor: # Get Geometry geom = row[0] # Create an empty array object arr = arcpy.Array() # Read points, if Z is found to be zero reset it to 1 for part in geom: for pnt in part: if pnt.Z == 0: pnt.Z = 1.0 # Add updated point to Array arr.add(pnt) # Construct new polygon geometry from array whilst setting spatial reference and indicating it has Z newpoly = arcpy.Polygon(arr,sr,True) #Update row cursor.updateRow([newpoly])