Please review the sql and result .I would like to know why dose the table has 957 rows after the rollback

Thanks

sql
====
use pubtune_db
go
select @@version
go
sp_configure "number of locks"
go
if object_id('x') is not null drop table x
go
create table x ( c char(1)) lock datarows
go
select lock_cnt = count(*) from master..syslocks
go
begin tran
insert x values ( 'A')
go 4000
select lock_cnt = count(*), tran_cnt = @@trancount from master..syslocks
go
insert x values ( 'A')
go 2000
select row_cnt = count(*), tran_cnt = @@trancount from x
go

----------------------------------------------------

output

-------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Adaptive Server Enterprise/12.5.0.2/EBF 10580 IR/P/NT (IX86)/OS 4.0/rel12502/185
0/32-bit/OPT/Fri Oct 18 19:51:23 2002

(1 row affected)
Parameter Name Default Memory Used Config Value
Run Value Unit Type
------------------------------ ----------- ----------- ------------
----------- -------------------- ----------
number of locks 5000 752 5000
5000 number dynamic

(1 row affected)
(return status = 0)
lock_cnt
-----------
0

(1 row affected)
(1 row affected)
4000 xacts:
lock_cnt tran_cnt
----------- -----------
4001 4000

(1 row affected)
Msg 1204, Level 17, State 2:
Server 'SYBDEV', Line 3:
SQL Server has run out of LOCKS. Re-run your command when there are fewer
active users, or contact a user with System Administrator (SA) role to
reconfigure SQL Server with more LOCKS.
(1 row affected)
2000 xacts:
row_cnt tran_cnt
----------- -----------
959 0

(1 row affected)

----------------------------------------------------------
NB: the row count is not consistent . result varie with run